![Christopher 3D](/img/default-banner.jpg)
- 143
- 1 127 824
Christopher 3D
Registrace 3. 04. 2013
Library overrides, assets and linked objects, part 3.
This is part 3 of the series on creating product variations in Blender. We use assets, geometry nodes, library overrides, externally linked objects and Scenes.
Support this channel: patreon.com/Christopher3D
START FILE. www.patreon.com/posts/product-with-and-110400881
00:00 Introduction
01:05 Saving and reusing items as assets
06:13 Using Fake Users
07:21 Linking external resources to geometry nodes
10:21 Preparing external geometry for linking
11:16 Applying materials, Data vs Object (IMPORTANT!)
13:58 Using Library Overrides
14:40 Editing externally linked object and materials
17:34 Using the 'Scene Time' geometry node
19:50 Transferring objects to other scenes
#assets #blendertutorial #linking #overrides #geometrynodes
Support this channel: patreon.com/Christopher3D
START FILE. www.patreon.com/posts/product-with-and-110400881
00:00 Introduction
01:05 Saving and reusing items as assets
06:13 Using Fake Users
07:21 Linking external resources to geometry nodes
10:21 Preparing external geometry for linking
11:16 Applying materials, Data vs Object (IMPORTANT!)
13:58 Using Library Overrides
14:40 Editing externally linked object and materials
17:34 Using the 'Scene Time' geometry node
19:50 Transferring objects to other scenes
#assets #blendertutorial #linking #overrides #geometrynodes
zhlédnutí: 783
Video
Hide in Viewport, a crappy Blender default. How to fix it.
zhlédnutí 3,4KPřed 14 hodinami
In this video, I talk about two items that relate to each other. One is the difference between Hide in Viewport and Disable in Viewport, why I think it's frustrating that one is on by default. And the other is an awesome little addon called Edit Instanced Collection. Edit Instanced Collection addon: github.com/SuperFLEB/BlenderEditCollectionAddon Support this channel: patreon.com/Christopher3D ...
Geometry nodes! Create product variations easily, Part 2.
zhlédnutí 1,1KPřed 14 hodinami
In this tutorial, I walk through the process of setting up variations for a product type rendering scenario with the help of an easy geometry node setup. Thanks to @Newemka for pointing me in the right direction about the geometry nodes setup. This is a follow up video to this tutorial: czcams.com/video/1S_T2MS2O84/video.html Support this channel: patreon.com/Christopher3D #geometrynodes #blend...
Creating product variations in one file, Part 1.
zhlédnutí 2,5KPřed 16 hodinami
In this tutorial, I walk through the process of setting up variations for a product type rendering scenario. This allows you to create many variations of materials, camera angles and other components and render all of these in one pass. We use the non-linear editor, the Scenes function, actions in the Dope Sheet, and finally the video editor. To see how geometry nodes can also be used to help w...
Seamless interweaving pattern for use with Tissue.
zhlédnutí 1,9KPřed dnem
Create a seamless interweaving pattern for use in the Tissue addon. #tissue #blender4.2 #tutorial
Tissue is awesome.
zhlédnutí 15KPřed 14 dny
In this tutorial, we look at the use of a free add-on (now extension in Blender 4.2), called Tissue. It helps in the creation of a metal lattice structure that's part of a storage object. Support this channel: patreon.com/Christopher3D 00:00 Introduction 00:35 Modeling the top of the container 05:18 Modeling the 'base' source object 10:20 Using QuadFlow Remesh 11:30 Modeling the 'component' rep...
Thin Film Interference in Blender 4.2
zhlédnutí 6KPřed 14 dny
In this tutorial, we take a look at a new material function within the Principled BSDF in Blender 4.2 called Thin Film Interference. This is specific to Cycles and isn't supported in EEVEE. Support this channel on patreon.com/Christopher3D 00:00 Introduction 01:05 Nature of Light 01:18 Nanometers 03:09 Constructive and Destructive interference 03:25 How thin film interference happens 06:57 Sett...
Blender 4.2. It came back! Kinda... Shade Auto Smooth.
zhlédnutí 3,9KPřed měsícem
This short video talks about a change to Auto Smoothing in Blender 4.2. #autosmooth #blender4.2 #blender42
Good hard body modeling practices with subdivision surfaces.
zhlédnutí 1,9KPřed měsícem
This is part of the stapler series of tutorials exploring various aspects of the modeling process. In this tutorial, we model a seemingly simple part of the stapler. This demonstrates good subdivision surface practices for hard body modeling. #blendertutorial #modeling
Parallel Offset Sliding is magic.
zhlédnutí 4KPřed měsícem
In this video, I remodel the top of the stapler, but using a different set of techniques and approaches from the first tutorial, in order to demonstrate how a model can be achieved through various processes. I focus on the use of kind of hidden but awesome feature that I call Parallel Offset Sliding. #shrinkwrap #blender4 #blendertutorial START FILE: drive.google.com/file/d/1kxTm1eXHFiXJogS5qDI...
Stapler Model WITH Subdivision Surfaces
zhlédnutí 2,2KPřed měsícem
In this tutorial, we return to the use of subdivision surfaces to model the upper part of the stapler. START FILE: drive.google.com/file/d/1kxTm1eXHFiXJogS5qDIHGrk7_5_4wkkB/view?usp=sharing
Modeling without subdivision, with modifiers, for non-destructive editing workflow.
zhlédnutí 6KPřed měsícem
In this tutorial, we model part of a stapler without using subdivision surfaces, but with modifiers for a non-destructive workflow. We also pay attention to controlling surface normals for proper shading. START FILE: drive.google.com/file/d/1SDq7fD76ERjmdUP7Q4skP3CHvJPVMoJz/view?usp=sharing 00:00 Introduction 00:55 About normals 02:50 Setting up the core geometry from profiles 09:11 Creating th...
Modeling with modifier stacks
zhlédnutí 3,4KPřed 2 měsíci
In this tutorial we model an Ikea like pegboard product that is used for wall storage, using modifier stacks (bevel modifier, array modifiers, and mirror). Start file: drive.google.com/file/d/1SCQQ_oVH6lpqpqlUF7YP96QNAUYRllZW/view?usp=sharing #blendertutorial #modifiers #arraymodifier #bevelmodifier
Blender 4.2! New tone mapping, the Khronos PBR Neutral Tone Mapper.
zhlédnutí 17KPřed 2 měsíci
Blender 4.2, now in beta, introduces a new view transform/tone mapper option called the Khronos PBR Neutral tone mapper, developed by Emmett Lalish, under the auspices of the Khronos 3D Commerce working group. It aims to produce better tone mapping for situations that need to match specific sRGB defined colors which is common for package design and product visualization. It helps to solve issue...
Create metallic toothpaste packaging, Part 3: Layered material setup
zhlédnutí 1,7KPřed 2 měsíci
In part 3 of the toothpaste packaging tutorial series, we look at diffuse and metallic material setups for the object. We specifically focus on setting up a layered material system that simulates layering in a typical graphics application. 00:00 Introduction 00:23 Scene setup 00:45 Object duplicate organization 04:28 Reviewing the UV template 06:05 About material slots 08:17 Diffuse vs metallic...
Create metallic toothpaste packaging, Part 2: Rigging and animating the package
zhlédnutí 1,6KPřed 3 měsíci
Create metallic toothpaste packaging, Part 2: Rigging and animating the package
Create metallic toothpaste packaging, Part 1: Modeling and UV mapping
zhlédnutí 3KPřed 3 měsíci
Create metallic toothpaste packaging, Part 1: Modeling and UV mapping
4.1 IMPORTANT change to AutoSmoothing!
zhlédnutí 29KPřed 5 měsíci
4.1 IMPORTANT change to AutoSmoothing!
PART 4. UV map the seat cushion of a mid-century modern chair.
zhlédnutí 1,4KPřed 5 měsíci
PART 4. UV map the seat cushion of a mid-century modern chair.
PART 3. Model the seat cushion of a mid-century modern chair.
zhlédnutí 1,3KPřed 5 měsíci
PART 3. Model the seat cushion of a mid-century modern chair.
PART 2. Model a mid-century modern chair using SDS.
zhlédnutí 1,8KPřed 6 měsíci
PART 2. Model a mid-century modern chair using SDS.
PART 1. Model a mid-century modern chair using SDS.
zhlédnutí 2,4KPřed 6 měsíci
PART 1. Model a mid-century modern chair using SDS.
LightWrangler Updated! Point and click lighting.
zhlédnutí 3,7KPřed 6 měsíci
LightWrangler Updated! Point and click lighting.
Need to create 3D type? Frustrated by polygon tools? Use Nurbs!
zhlédnutí 3,8KPřed 6 měsíci
Need to create 3D type? Frustrated by polygon tools? Use Nurbs!
Modeling a vintage camera in Plasticity for Blender users.
zhlédnutí 2,5KPřed 6 měsíci
Modeling a vintage camera in Plasticity for Blender users.
If you enable Clipping in the mirror modifier you really don't need to apply it all the time, can save on a lot of extra work. And some other quick tips: ctrl-1, ctrl-2, ctrrl-3 in object mode directly apply a subdivision modifier with the given level. And that vertex cleanup after the boolean is done quicker selecting the 3 verts in the right order, then hitting M for merge and L for last (nearby on the keyboard, so really quick): there is no need to first join two verts then clean up the left over edges.
How to fix shading after this? Gonna make a video about?
Super interesting and useful, thanks for making it understandable for us muggles!
Why is my fillet option, set first points, and set origin to spline grayed out?
I'd rather do scenefrake + 1 so you don't get issues when doing animations and such. There is a reason I believe they start at frame 1 and not ar frame 0. Can't recall though why or what the reason was
Ps when you showed the method of linking it to scene 02. I was wondering, can't we simply instance the same tall cup in the other scene? It's been a while since I worked with that feature. I don't work with scenes that much. Most of the times I create collections for different scenes in the main scene
The transfer function I showed creates an instance into the other scene.
@@christopher3d475 so if we do shift a in that other scene, we can't insurance the same object. I've not tried this yet, are collections bound to a per scene base?
@@christopher3d475 i tried it today. Adding an instance collection in a other scene work just the same as duplicate into scene. Ps you can also do it from the outline. Seems like same approach
I somewhat get a feeling this method is quite tedious. I'm not familiar with the asset library yet. I still use node groups as Custo material setups. Ps I've made an edit to the edit linked libraries, where when you edit them you can click a relais button. This is handy when you work with large scènes. Because normally you either need to do this manually in blender file section in the outline or close and reopen the working file.
send me the new version with that edit, I'll test it out.
@@christopher3d475 I mailed you my version. Hope it works for you as well
If you were iterating over the same x number of materials, multiple times using the frame number as the input, using the modulo function of the math node, should enable this when the frame number exceeds the number of materials.
I know this might be too much to ask, but could you someday consider doing a tutorial of an entire scene (like a kitchen for example)? I really like the look you're able to achieve in Blender. Best regards!
Good video. So many different workflow options 😊.
Wait, let me get me bachelor degree in lighting physics and math first.
This is the exact issue I'm dealing with at the moment. The solution you provide feels a bit weird to me even though it seems to work from a visual stand point. But what if you're dealing with liquid being poured into a glass and you don't have a perfect edge loop you can separate out? There has to be a way of keeping the container as a closed mesh.
Currently there's not a great physically correct solution. Blender needs a proper process called nested dialectrics to handle this situation in a correct way. This is something the developers are aware of and there has been some work on it. I do plan on updating this video to demonstrate what it is because there's also another piece to this puzzle called relative index of refractions which I didn't cover in this video.
@@christopher3d475 Looking forward to that video. It would also be interesting to know how a volume shader could be added to the mix - be it for the glass material or the liquid itself, given that you're not dealing with pefectly clear liquids.
@@mulanmiller5000 Here's a quick tip for the liquid. Its index of refraction should be relative to the glass. So if your glass is 1.52, and the liquid is 1.33, going from the glass to the liquid you need to calculate a relative IOR which is 1.33 divided by 1.52, giving you 0.875. I know that sounds odd that for the liquid, use that value. What makes this tricky is that the top of the liquid which is interfaced to air, you need to keep that at 1.33. A proper nested dialectric system will handle this for the user, in addition to letting you overlap the geometry of the two medium and then determining which to use. In my mind this is the most important thing that needs to get integrated into Cycles, but I don't know what their timeframe is for that.
@@christopher3d475 I appreciate your help, I'll keep that in mind. In this case the product is a make-up bottle so the "seam" that separates the container from the liquid is actually hidden in the bottle cap. Your method gets me 90% there but I still miss that thin layer of glass in front of the liquid. Technically wrong I'm sure but using a tiny bit of soldify seems to help...
Nice tutorial , many thanks !
Just only for making mesh like that, there is simpler way than using Tissue add-on. (extra curve object) Add - Curve - Knots - Celtic links. This will automatically generate exact same mesh in a second.
This is gold.
But, viewport button doesn't animatable for collections. Right?
I use the knife tool all the time, but never really touched the knife project tool. It's a game changer!
I was using this recently. I want to simply turn off certain objects during a render, to make them disappear. I could not believe what a pain this was! When an object is turned off, the keyframes on the graph editor also disappear! Which make it incredibly difficult to animate. My solution was to ignore them in the viewport and just animate the render (camera icon) enable/disable. But ideally, I want the object to also disappear from my screen as well as the render. This really needs to be fixed. I should be able to animate both screen and render visibility with one set of keyframes, and I would like the keyframes to remain visible in the graph editor and dope sheet. There were times I couldn't even find the visibility channel in the keyframes. I had to turn on auto-keyframing and set a keyframe in order to get that channel to appear in the graph editor. Ideally, I would like to be able to animate objects fading out, without going into the materials editor. This is something I used to use extensively in Lightwave, and it wasn't difficult.
when i shrinkwrap the curve to a surface instead of it following a smooth line it follows the lining on the surface?
Great tutorial!! I was actually dealing with this exact problem on a project this week and came up with a similar but much more complicated solution using geometry nodes, i'll definitely use your method next time. As a side note, you can cycle through different variations at once using the index parameter as a driver for the same parameter on different objects with similar geometry node trees, eliminating the need to change each variable manually (this is especially useful for models with multiple parts and material combinations)
Yeah, I love these very practical uses for geometry nodes. I'm working on part 3 now and have made another adjustment to the node setup to automatically cycle through the materials.
In one video, you thought Scenes, NLA, Video Sequence Editor. I love your videos. They are simple, Easy to follow and production ready tips.
Make sure and catch part 2 as I add more to this first tutorial, and I'm working on part 3 with more goodies.
Great topic! I worked on a similar very large project. One challenge I faced was file naming when working with such high numbers of images. I needed to figure out a way to automate this. I ended up using the markers in the video editor to mark the color name for each variation at each frame and copy and paste this across each scene strip. You are able to embed metadata, including the scene name as well as these markers to help identify the product variation and view in each render. I was then able to write a simple script that read the metadata to change the file name.
Thank you!
Love it! Little detail: No need to keyframe every frame (@ 6:40). You can keyframe initial key and last key and Blender will interpolate.
Thanks for the tip. I'm working on a follow up tutorial that does the animation using a separate node which is even better.
Soo helpful! thank you!
For me the eye icon and the display icon have two VERY distinct use cases, and I need and use both all the time. The EYE is for when I'm working on something and temporarily need to hide some mesh that's in the way, or if I want to solo an object during modeling or something similiar. I use it when I do not mind that the object comes back when I press alt + h to unhide everything. The SCREEN is used in the exact opposite case: I want to hide this object in the viewport PERMANENTLY. I use this for things like fog boxes or walls when working on interiors. Things that need to be in the scene but that I do not need to see at the moment.
You totally scooped me on this topic! Fantastic video as always, Christopher
I'm not sure if it’s something you’ve considered, but a masterclass from you would be incredible. Your knowledge and teaching style, focusing on the “why” rather than just the “how,” is why i subscribed when I did. Honestly, you’re in my personal Blender Hall of Fame, which is certainly the nerdiest thing I have ever said. No regrets 😅. You've quickly become one of the few people to have a fundamental impact on my workflow-alongside Viscorbel (from way back), Grant Warwick, VRay Guide, and Arrimus. I currently work in product visualization, and your channel has dropped so many gems that have been impossible to ignore. The content is excellent, and I’m so glad I discovered your channel. Please keep up the fantastic work!
Game changer! I've been doing this manually like a maniac all this time!? 😢 Thank you! 🥹 I feel like I'm beginning to see the Matrix now 😎
I think if you save the source collection as an asset after that you can import it as linked and dupluicate it in a circle . If you need to edit the source collection go to the source collection asset and use : "open blend file" and the changes will uptated in the linked collections
Yes, there's actually a built-in plugin for this scenario and I've used it. But it creates its own problems in terms of scene and asset management complexity. For instance, if you have this asset linked to multiple files, and you make a change that you only want in one, then you have to manage this condition and it's a pain.
Very useful video, glad these topics are brought up. For beginners, it's confusing because they think hiding in the viewport is disabling, which it isn't.
Yeah, I think that's my biggest gripe. Unless you know to go hunt for this feature, it's missing.
For those wondering: the "eye icon" hide button is: "I don't want to see it, but still want the object used in the viewport." It doesn't affect the object in memory; you can toggle hiding objects very quickly (even if they are complex). Simulations still run on objects even if they are hidden this way. This is best for when you're editing something but that one object keeps getting in the way: just get it out of your way _for now_ without affecting anything else. The "TV icon" disable button is: "Hide this for me, I don't want it to affect my viewport." So, it unloads it from memory (but will use it for the render). As others like timothycook and dafff08 mentioned, disabling objects can significantly increase performance. And of course, this is what's used when deciding what to render in instances in the viewport. Like other aspects in Blender, it's a very useful feature that's not greatly explained 😅 (source: I've made optimization add-ons, so I've had to figure this all out)
Good information 🇦🇶
nowadays I'm using the "Quick Groups" it's amazing! u can simply press ctrl+G to group, and select and press tab to edit in new scene and tab out. extremely useful.
Never understood that default. And you cannot animate visibility without the tv icon (the eye can't be animated at all (which admittedly makes sense)). It's generally annoying though because the graphs /keyframes disappear too whenever you hide something (unless you set it up distinctly). A geonode with a simple switch (input or nothing) is more convenient than that. And a driver on the render icon so it matches the tv icon might be helpful as well. Another visibility feature that they have really put in the most undiscoverable place of all: the local collection viewport settings (and its relations to the vis icons). Hint: its in the N-panel somewhere 🥚 thanks for the addon link. Looks really useful.
You can animate the eye icon btw, from object properties panel you'll see (visible in viewport) checkbox hover over it and press (i)
Yes, I actually demonstrate the animation of the 'screen icon' in a previous tutorial. It's very useful.
off topic, but i watched a video by the inventers of khronos and they said agx is actually better than khronos for realistic render. (23:04 in this video czcams.com/video/0oIZoSg03PY/video.html ) i also saw a video by cg cookie for the "render raw" addon which says agx can be used to get better saturated colors than usual (this video czcams.com/video/hS7uaTquwWc/video.html), i'd like to know your viewpoint on this.
It all depends on what you need to render. I think for architectural renderings, AgX is generally better. Khronos is really suited for a specific set of conditions, like neutral lighting and for things like product visualization.
@@christopher3d475 Thanks for the info
AgX can't handle saturated yellows and orange tones. For example, it nearly impossible to achieve realistic fire color, only post color grading will help. For this scenarios i choose khronos or filmic.
Next is multiple cameras, light setup and rendering to sequences.
First thing I do when install Blender is enable the "TV" icon and disable the "eye" icon for all workspaces and save the new default file. Never knew why the eye icon was default. Animator Pro tip: The TV icon will remove objects from the scene entirely vs just hiding with the eye icon. This allows for FPS speed up in scenes when objects that are dragging down the FPS are actually removed from memory.
Yeah, I save my default scene with TV on also.
Why it is not that way by default when you open blender for the first time?
Excellent.
This hide, disable for viewport and disable for render is one of the biggest think that have been bothering me since day one of me starting to use Blender. Sure having the possibility to having something in the viewport but not in the render or vise verse can be handy sometimes, but 99/100 if I hide something in the viewport I don't want it in the render either. And this is something that happens to often that I render something and it doesn't look the same as in the viewport because I somewhere forgot to press two buttons instead of one as you do in any other normal program, so then I have to hunt for that thing, which sometimes can take quite a while (on top of the fact that I also have to rerender it) ;\
It's confusing too because if you turn something off with the Eye icon, it renders that way in the viewport rendering, but not in the final rendering. So it's mismatched. This has never made sense to me.
@@christopher3d475 It also complicates making animations that have to do with hiding/showing models since you need to keyframe both the viewport property and the render property.
You don't need to manually copy the object to other scenes. Select object, In the top bar, Object > Link/Transfer Data > Link Objects to Scene > Scene Name Or Simply Press Ctrl + L
That's a great tip, thanks for the heads-up on that.
@@christopher3d475 Welcome
so many shitty things in the UX/UI that makes blender really bad. It's a shame they rely on users for QOL fixes even though the addon devs are hamstrung due to limitations of Blender's framework. Blender devs egos are too big at this pointl.
nah, thats not it. Blender UI is actually pretty open to change and super customizable if you compare it to other software, let's say Photoshop (really aged, cumbersome UI). I mean, Blender has some strange UI redundancies and weird places to find things, but just go back a few years and how much has changed for the better. It's just a lot of legacy they are carrying, too few overworked, underpaid devs! Don't forget all the different workflows they must address - not easy to please all demands. Good thing: you can dive into it and contribute directly if you have the skill. Try that with Adobe. They will just steal your ideas and leave you with terms and conditions that now all your creations are theirs.
Kool beans
Yes, I agree. Blender isn't that bad, in fact it's a breath of fresh air coming from Modo which lacks, for instance, the ability to change the scale of UI elements. Unless they've recently changed that, the fonts were small, color coded in a way that was hard to read, and they had sideways type in places that would get overlapped and nearly impossible to read. I overall like working with Blender's UI.
@@christopher3d475 Even a much simpler software that's well liked (substance painter) has issues with UI scale where panels can end up overlapping each other if docked. Had to disable my taskbar to see everything
That's my biggest problem with Blender. The UI just isn't intuitive and logical. I can never find things, or remember which menu they're under. For instance, say I want to hide an object. That should be under View, right? No, it's under Object. What if I want to merge vertices? Wouldn't that be under the Vertex tab? No, it's under Mesh. I want to subdivide a face? Nope, only edges can be subdivided.
this can be avoided entirely by marking it as an asset and editing in a different .blend file
why should you mark something as an asset to fix shitty blender? stupid.
Yes, this is a process I've used here and there, there's actually a built in addon that facilitates this. But it opens up a separate can of worms to deal with in terms of workflow.
the screen icon also does more. if you have a heavy scene it will also improve performance, since it actually disables the hidden object, removing it from the pipeline.
Hey there! I wanted to thank you for all the tutorials you’ve shared. They’ve been incredibly valuable to me. I recently created a reply video where I demonstrated how to set up a shader to change the color of an object. After I did notice you also want to change the material values and forgot to cover it in the video. However, I believe the technique is essentially the same, and you can apply it to the shader as well.
I actually just posted a followup video to this one where I use geometry nodes to swap out the materials.
@@christopher3d475 I saw that, it’s a great alternative. It's just an example of 100 ways to make a cube. :D
You can eliminate geometry nodes and all the multiple materials. Just use a value node fed into a color ramp that feeds into the color slot of a BSDF shader. For the value node enter #frame/number of colors. Then set the color ramp to Constant and then set the colors you want in the color ramp (spaced out evenly). Set the End Frame to the amount of colors you have then render the animation. This gives you one model, and one material.
That doesn't work if you have a complex set of varied materials. That was exactly the condition I had in a project, so simply altering the color doesn't work.
Wouldn't it be possible to use the Scene Time node in Geometry Nodes to change the index, which would eliminate the need to make key frames? Effectively you'd just need to make sure the length of your animation was equal to the number of variations.
There are probably a lot of ways you could augment this. I wanted to do the basic, core feature demonstration.
@@christopher3d475 Indeed, you can use #frame instead of keyframing the index. #frame is a variable that will take the value of the current frame.
@@3DEmporium As the above comment mentioned, GN and the Compositor already have the Scene Time node for that, so a #frame driver isn't really necessary.
OMG. This is just what I needed. Got one of these projects this week.
I'm editing a video right now with an even better way to do this. I will have it uploaded today.
@@christopher3d475 Like I said . Just in time. Thank You.
What a nice surprise! I just got a new ProductViz case and decided to try it with AGX (I just downloaded 4.2). When I saw the Khronos PBR neutral option in the dropdown menu, I was like, 'What the heck is this?' Then I found your amazing video about it! Thank you! It seems like it will significantly reduce post-production time.
Someone may have said this already, but in geometry nodes you can change the material per frame using the set material index node, eliminating the need for duplicates.
Yep, and I've just recorded an updated version using a geometry node setup to swap out colors. Thanks for the tip.