In OpenUSD, time codes are unitless points in time that serve as coordinates for animation, while time samples are key-value pairs that define attribute values at specific time codes. The stage metadata (time codes per second) determines how these unitless time codes map to real-world time, enabling linear interpolation between samples for smooth animation playback. Attributes can have multiple time samples, allowing complex animations where properties change at different points in the timeline.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
NVIDIA- OpenUSD Certification Time Codes and Time Samples @a16zspeedrun @NVIDIAOmniverseAdded:
We are live.
Check check check check.
Check check check check check.
done. All the checks are complete. We can start.
Oh, finally.
So, welcome back.
How we doing? How we doing?
>> We doing great. We doing great. So today I think we are going to focus on time code and time samples.
>> Yeah. Yesterday uh do you just want to give a recap of what you have done till now?
>> Yeah, I think till now we have completed stage prims and property and yesterday we focused on relationships specifically how relationships are used for different prims and how can you use relationship to create linkage between different kind of prims and the properties that you have. Uh I think that will cover it right or do you want me to add something else or if I have missed something?
>> Yeah. So basically what uh we have completed till now is the basics of setting up a stage in open USD. Uh what are prims and how do they work in a scene description.
uh what are the properties those prims have and uh uh in those properties what are attributes and what are relationships how they differ from each other. Attributes are more of uh uh you know uh about the prim like maybe the color, the shade, the lighting angles they reflect of stuff like that. And relationships are basically used to establish the linkage between uh those prim um stuff like that. Maybe to group different prims together uh in a you know uh in in a single group which uh behaves like oneself. uh for example a wheel and a uh a windshield and a wheel can be grouped under car. So we we're going to basically use a relationship to group those uh prims inside that another prim hierarchically.
So and today now we're going to just focus on time codes and time samples.
So I think we can get started.
Yeah.
>> Okay. So, time codes and time samples.
In this lesson, time code and time samples uh show us how to set up animation in a stage using OpenUSD.
So, in this lesson, we will basically set start and end time codes for a stage. Okay. Learn how to set start and end time code metadata for a USD stage.
establishing a timeline that forms the foundation for animated scenes.
Okay, it's now over here we're going to set time samples on attributes. Okay, so we're going to basically set time samples on attributes.
Gain the skills to set the time samples on individual attributes allowing us to animate specific properties of prints over time. Okay. So basically I think we're going to set particular values as time samples on different attributes and we're going to let open USD animate uh the properties or let yeah it's basically going to animate the specific properties of prims over time on that stage.
So over here time code uh what does it say? One sec.
Time code is a unitless point in time.
Um like a frame with units derived from the stage.
Unitless point in time.
Okay.
Do you want to add something on this or >> No, I think let's like we can go ahead and see what it says now.
>> Okay. And then time sample refers to individual time varying attribute values. Oh my god, fast.
Refers to individual time varying attribute values in USD. Time sample refers to individual time.
Individual time period.
What does that mean?
>> So I think I would say that okay on each and every time stamp the attribute value might change you know. So for example, we have a clip of 5 seconds and that clip is trying to render a ball and that ball is trying to change a color from red to blue.
>> Mhm. So at at let's say on the first frame in the first 5 seconds or 4 seconds the the attribute val values are set to uh maybe the spear the size of the spear is four and on on the 10th second the size of the sphere is eight. So in that scenario we can see that okay the there there is some kind of change in uh dimensions or something of the sphere and that's how we we would render it. I think that's what it is trying to say.
>> Okay.
Attributes can have m multiple time samples. Okay. One attribute can have multiple time samples. Miping time codes to data type values for animation over time.
Okay.
>> So an attribute can have so have multiple time samples. So yeah, it means that okay uh an attribute can be attached onto different time points. For example, I would say if you keep the attribute same >> let's say let's say you have uh wait this is an attribute like this is an eBay card and this is an attribute of color or something right?
>> Mhm. and this this attribute.
So on on the first frame, >> wait, wait, wait one second. I'm going to Yeah. No.
>> Okay. So on the on the first frame, the attribute is Okay, we need to show the card, >> right? And then on on a second frame, there are no attributes.
>> Uh-huh.
>> So what is it now? It's hidden.
>> Yeah, it's hidden.
>> Right. And on the fifth frame, the attribute we can you can attach the same attributes. Now you can see that the the the fra the frame is rendering the same point.
>> So I think we can map the same attribute to multiple time frames over the timeline >> and in that scenario that's how we can do the animation rather than that's what it's trying to say over there I would say.
>> Okay.
Yeah. I think this is we we're going to get more clarity once we Okay. What's the third point? It's saying time code is oh okay never mind in open USD time code and time samples. So time code represents a point in time for quering or authoring time varying data in USD time represent a point. Okay. And time sample a time samples is a time value pair that defines an attributes value at a specific time. Okay. So it's like a dictionary where it's defining the attributes value with the key being the time like the time sample being >> yes that's what I said right that's what I said like basically you are on a time on a scale of 1 to 10 >> you're going to map this attribute let's say this is an attribute >> to that time frame and then you can move that attribute at anywhere >> so the whole so you can map the whole time uh time sample onto the same attribute >> and it's not going to change but you can change other attribute. Let's say there there is there is this card that is going to come up like this on some frame and then it's going to go down and that is what uh basically the attribute would be at that point on a different time frame.
>> Okay. A time sample >> yeah a time sample is a time value pair that defines an attribute value at a specific time. Cool. Uh so in open USD time code and time sample are two important concepts that enable us to work with animation and simulations in USD. Okay.
Time code is a point in time with no unit assigned to it. Time code is a point in time with no unit assigned to it.
>> It's just a point in time.
>> Yeah. Like you know time is relative.
>> Einstein strikes again.
>> [ __ ] You can think of these as frames whose units are derived from the stage.
You can think of these frames whose units are derived from the stage.
>> Complicated but the god is with us.
think of time codes as tick marks on a ruler that doesn't have inches or centm written on it. Okay, so basically imagine you have a ruler with 60 lines, little lines, text but no labels. The text time code, these are just positions. line 30 is exactly halfway. You don't know that's 30 seconds, 30 frames or 30 minutes. Oh, okay. Okay. Okay. Okay. So, there it has no specific unit or like metric to attach to it.
Got it. Um, time samples refers to individual time varying values associated with an attribute in USD. Time samples refers to their individual time varying values.
Okay, I got it. I think I understood what this is.
So basically time codes are those tick marks on the frames and then time samples refers to the individual time varying values.
So like multiple tick marks for an associated attribute are going to be called a time sample for a individual.
Yeah.
>> Similar to like if you put effects in an iMovie, right? When you put the frame and then in the timeline you can put >> maybe have you used Adobe Flash?
>> No, I I have used iMovie.
>> I have done Adobe Flash animation classes when I was a kid.
>> My god. And I think I remember what this is saying. So basically in Adobe Flags, is it you? Steve Jobs, is it you?
>> [ __ ] you.
>> So basically what happens is if you define like on a frame, if you define this like a circle, right?
>> Mhm.
>> And then let's say this is on 1 second like first second, right?
>> Mhm. And then on the second you define uh like the same thing you define as a square like on the same frame.
So there has to be some sort of thing. So like let this be the first frame let this be the second frame.
Right?
>> But for this circle to become into this square there needs to be some sort of animation that needs to happen. That that that is what we call I think we that that's where we will put attributes right because the attributes are going to change.
>> Mhm.
>> Yeah. Attributes are going to change. So it's going to USD is going to perform the animation on its own. We don't have to do anything. So this >> you're going to see a sphere like a circle becoming a square in real time.
>> That's what I studied in um Adobe Flash.
Bro, I should Yeah, I'll do that later.
Okay.
Time samples refers to individual time varying values associated with an attribute in USD. Okay.
Each attribute can have a collection of time samples. Each attribute can have a collection of time samples. Correct.
That map time code to attribute data type values. Correct. So one time code.
So basically in this in an attribute um sorry.
So let this be the dictionary of that time sample.
And over here the this would this is going to be the time code right.
>> Mhm.
>> Over here.
And this is going to be the attribute value like what the attribute is at that point.
>> Right. And so this is going to be called a time sample as a whole.
>> Mhm.
>> Right. This is what it means I guess.
Okay. Attribute can have a collection of time samples that map time code attributes data type values allowing for animation over time for a reminder of the purpose of attributes. Please review introductory lesson. Uh okay. How does it work in USD scene? The time code coordinates or time code ordinates of all time samples are scaled to seconds based on time codes per second.
Metadata value data about prims and properties that guides USD's behavior.
Metadata is about is data about prim and properties that guides USD's behavior but is not renderable in content scene.
Okay.
Metadata values defined in the root layer. This allows flexibility in encoding time samples within a range and scale suitable for suitable for the application while maintaining a robust mapping to real world time for playback and decoding.
Okay, this allows flexibility in encoding time samples.
Time codes per second.
Bro, do you understand this?
Time codes per second. How about what does this say? It's going to say something right now.
>> This says metadata.
God mode on.
>> Mhm.
>> Then this is a blank ruler. Ruler is the stage. Uh the tick these are position 930 is exactly halfway but you don't know that 30 seconds 30 frames. The stage acts as the label. If you tell the stage each tick represents one frame at 30 frames per second. Then time code 30 is equal to 1 second. Time code 60 is equal to 2 second. Okay.
So the stage and the time code are dynamic.
>> It makes your animation scalable if you animate a ball to bounce at time code 24. Later you decide to change your project from 24 fps to 60 fps. Time code says time code stays at 24. You don't have to rewrite your animation. the stage simply calculates the fast how fast playhead moves through those ticks.
Yeah. See this is what I was talking about over here with Adobe Flash.
>> Mhm.
>> That it basically recalculates how fast player head moves through those sticks.
>> So, so what does time code per second means? Because I think uh it said that time time sample or time code doesn't have a unit. Yes, it says the time code is a point in time with no unit assigned to it. Exactly.
>> And then time code per second is like okay the frame is in per second that's what it meant right >> where where does it say time is in per second >> like it says time codes per second this one this variable >> oh this one wait I have not put that in right uh as of right now wait >> I was reading the earlier one second key terms in simple English time code location on the timeline >> frame Frame 10.
>> Yeah, that's what I said. Frame 10.
>> Yeah. The value at that location. At frame 10, the ball is 5 units high.
Okay. Time sample is the value at that location.
>> Yes.
>> Oh, so basically this this is going to be value.
>> Yes. Because it says that, right? It was a dictionary key value pair.
>> Yeah. Time code and value.
>> So time code is key and value. we have.
>> Yeah. So basically this is going to be a time sample where if this is one and the value is something over here like uh bounce or something right for a ball and then two is something else. So basically this is going to represent like a total time sample. Got it.
But yeah.
Okay. Now let's see time codes per second. The speed limit.
The speed limit set on stage that tells the computer how many ticks happen in one real world second. Okay.
Time codes per second over here just means like in 1 second how many ticks are going to happen in 1 second. And what is a tech? How these are just positions. Line 30 is exactly half frame. But you don't know if that's 30 seconds, 30 frames or 30 minutes.
The ruler the stage act as a label. If you tell the stage each stick represents one frame. Oh, okay. So you can predefine how much Oh. Oh. Okay. Okay.
Okay. Okay. Makes sense. Makes sense.
>> Mhm.
>> Then what is time code per second then?
>> Oh, the speed limit set on >> bro. The speed limit. Yes. In a in 1 second, how many time codes are happening?
>> Oh, I see.
>> So in USD scene, the time code ordinates of time samples are scaled to seconds based on the time codes per second.
Metadata value defined in the root layer. Got it. So this is going to be defined in the root layer.
How many ticks are going to take place in 1 second? Got it.
>> Everything is getting slowly defined in the root layer, bro. The root layer is going to be really crazy.
>> Yeah.
>> Everything like relationships, attributes, time samples.
>> These are like the building blocks of US Open USD, right? So we are just you know going step by step to see how we we are going to like align and put everything all together into a system >> to maybe create a render or something.
>> Mhm.
>> Okay.
So this allows flexibility in encoding time samples within a range and scale suitable for the application. This allows flexibility in encoding time samples within a range and scale suitable for the application while maintaining a robust mapping to real world time for playback and decoding.
Okay.
For example, if the root layer has time codes per second equal to 24.
Okay.
>> It's going to >> 24 24 ticks per second. Like 24 time codes per second >> per second. Okay. Okay. Okay.
>> A time code value of 48 would correspond to 2 seconds. Yes. Okay. Time code value of 48 would correspond to 2 seconds.
>> Wait, how?
>> Got it, >> bro. Because 48 divided by 2 24 is two, >> bro. It's simple. Time codes per second.
>> Oh, okay. Okay. Okay. Okay. Okay. Okay.
Okay.
>> Let me explain it to you, you dumb [ __ ] Um okay so in uh the time code per second is defined as 24 right which means in 1 second uh in a one real world second there are going to be 24 ticks or time codes in 1 second. So for if a time code is 48 right this means this is showing the data for 2 seconds two real world seconds do you understand? H yeah I get it now I get it because it says 24 so we do 48ID by 24 and then we get 2 seconds what correspond to 2 seconds for real time after a time code zero what does this of the real time after the time code zero what does this mean the last line >> time code zero oh time code zero the first frame time code 0 >> 0 1 and two >> yes 0 1 2 so time code zero would be would be like uh 2 seconds right that's how we define it it says over there time code 30 is 1 second time code 60 is 2 seconds so if we say time code zero >> then wait what >> oh wait I think I understand I think over here there is no like for zero second like it's going to be zero and one so like it's going to be 24 for 0 and Wait for 24 it's going to be you you're saying zero.
>> Yeah.
>> Because at initially when there's no time like like when the when no time has elapsed then also time code is going to be 24 >> 30 frames. So so over here 48 means 48 frames per second right? Wait, let me >> Yeah. Yeah. It says 48 frames per second. So, so if if you look at the some look look into the Gemini one, it says at the stage act as the label, right? Each tick represents one frame at 30 frames per second, right? So, at time zero, it would be the 48 frame.
It would have 48 frames, right? Or it would have what?
Wait.
Imagine you're looking at a long strip of movie film. The strip, the stage.
This is your entire animation.
Okay. The text. These are little individual frames printed on the film.
The projector time code per second. This is the speed of the machine that plays in the film.
Yeah. D math. If the machine is set to swallow 24 frames every second, you want to know where you are, you have reached for frame number 48. Time code value 48. The machine eats first 24 frames. 1 second has passed. Machine eats next 24 frames. Another uh one has passed. So, okay, why not just say 20 uh 2 seconds? We don't write 2 seconds because you might change the projector later if you decide the movie looks too choppy and change the speed to 48 frames per second.
>> The frame 48 is now one second.
>> Yeah. Yeah. Wait, I'm going to ask.
Bro, >> bro, >> what?
>> My system froze again. The hell? What is Why the hell is my system freezing again? Again, I think I do have some services that are breaking my system up.
I would have to take a look. I'm going to restart again.
>> Yeah. Okay. The hell?
Do it.
Yo guys, how's it going? Say hi in the chat. This is going to be right back.
So over here time samples are used to store varying data for attributes such as position, rotation or material properties. When an attribute is valued at specific time code, the value is linearly interpolated from the surrounding time samples allowing for smooth animation playback.
Ah I see interpolation time samples are used to store time varying data for attributes.
Okay. So different uh like an attribute will have different position at different times, different rotation at different times and material properties like different sort of reflections and material shading properties at different times.
So when an attribute is evaluated as a specific time code on a particular specific time code. Oh, one second is out the back.
I'm excited about getting to the examples today because we have a we have our notebook working for the render as well.
And we have got some pretty amazing research papers to read video generation in robotics prior workshops.
What h time samples are used to store. Okay, we did this. When an attribute is evaluated at a specific time code, the value is linearly interpolated from the surrounding time samples allowing for smooth animation playback.
Got it.
Okay. Cube dot get display dot color attribute dot get time samples.
Uh-huh.
Below is example of how we can get or set time samples in Python. First, we'll be getting time samples of the display color on cube prim.
This method returns a vector of the time code coordinates.
time code ordinates at which time samples are authored for given attribute. Lastly, we are setting translation value of sphere at specific time code. This method says the time sample value of attribute at specific time code.
Uh cube dot get display color attribute dot get time samples returns author time samples. Okay.
Cool.
Lastly, we are setting translation value of sphere at a specific time. Go to this method. Okay. Returns author time samples cube.
Okay. Wait. I think he's here.
Yeah.
One second. Let me put you back in the stream.
Yeah, that might be causing those issues.
>> Mhm.
>> Or let me You know what? I I'm paying I'm paying for cloud code, right? Let me let me pull that thing up, >> bro. to do it after the stream.
>> Yeah. Yeah. I was just going to do it in background. Anyways, so where were we?
>> Yeah, we were just watching this.
Uh we did this and then we're talking about time samples are used to store time varying data for attributes such as position, rotation or material time properties. When attribute is evaluated at specific time code, the value is linearly interpolated from the surrounding time samples. When an attribute is evaluated at a specific time code, the values okay. So basically, if there are let's say 1 2 3 4 as time codes and we specifically stop the frame between 2 and 3, right? So the value is basically going to be linearly interpolated. This is going to be the algorithm that's going to be used for animation on the stage.
>> What does description stage >> like what does it mean in simpler way simpler terms? Wait, I understood that.
>> I think let's say this is the frame like this is the timeline, right?
>> Mhm.
>> Let's say this these are the frames, right?
Okay.
>> Okay.
Now over here one [ __ ] bro.
1 2 3 like an array.
>> Yeah. So basically if they uh ask us um one second this is two this is three this is four whatever right and I specifically stop the anim like I stop the frame in this part right in the middle let's say so it's saying how is going to like a a prim going to look like if a prim was a sphere in frame two and a square in >> frame three. Right?
>> How is it going to look like when if I stop it right in the middle of these two frames?
>> H >> it's going to look something like this because it is going to be translating to like a sphere is going to be translating from a sphere to a cube, right?
>> Mhm. Mhm.
>> So the what this is basically saying is when an attribute attribute is evaluated as at a specific time code >> the value is linearly interpolated from the surrounding time samples >> the surrounding time samples over here like this. This is the attribute value over here and this is the attribute value over here.
>> So that is going to be allowing for smooth animation playback.
the animation playback that we are looking over there >> and I think we're going to see some really good examples in our notebook once we start running these.
>> That's what I feel.
>> Makes sense. Makes sense.
H >> nice.
Okay.
Now let me below is an example of how we can get we can get or set time samples in Python.
First we're getting the time samples of display color on a cube prim right.
>> So that is done. This method returns a vector of time code ordinates.
This method okay returns a time code ordinates at which the time samples >> displayed.
>> Yeah, display color attribute. Uh and then they're using get time samples function over here.
>> Okay.
>> So that's basically going to return the time samples. uh it's going to return a vector of time code or coordinates at which time samples are authored for given attribute.
>> Lastly, we are setting a translation value of a sphere >> at a specific at a specified time code.
This method sets the time sample value of the attribute at the specific time code.
This method sets the time sample value of the attribute at a spec. Set the time sample value GF ve 3D. Okay, so this is going to be RGB again. I think >> uh at a specific time code sphere xform API.transit. I think I'm going to have to ask this explanation.
Guys say hi in the chat. There are six guys, six people watching this.
>> Uh if Karango, if you are watching, please send a hi.
>> He's your He's your buddy.
>> Yeah, he's my buddy. He's going to be a millionaire soon.
You like us?
>> Like us. Okay.
>> Same private jets. Same private jets.
>> Same.
>> Nice.
>> Okay.
Okay. Uh, this code shows the two sides of working with animation in OpenUSD. Reading existing animation data and writing new animation data. Okay. Reading animation data. What it does? It asks the computer at which specific frames did someone change the color of this cube. Okay, the result it returns a list of time codes frame numbers. Dumb analogy. Imagine a flip book where only some pages have drawings on them. This command gives you a list of the number of pages where uh that actually have link ink on them.
Okay, got it. Got it. So this is basically giving us the dictionary for >> uh when the colors are actually visible, right?
>> Mhm.
>> Okay. Writing animation data. This is how you tell the object where to be at a specific moment. So sphere xformapi settrate the move command.
GF vec 3D the destination it tells the sphere to go to these coordinates GF ve okay move this is the this is the ve this is the thing we were using to move over >> the x y or z axis for a whatever object >> mhm >> and then time equals to us dot time code 30 usd dot time code 30 the appointment time it says Don't just move there now.
Make sure you are at these coordinates exactly when the timeline hits the frame 30. Okay, got it.
Oh, okay. Okay. Okay.
And then Okay, I think I get what this code is doing a little bit.
Okay, I think we can move to our notebook.
Mhm.
>> Let's create a USB SH to server blah blah blah. Okay, let's see the magic over here now. Let's go. Oh, we could have just read this also.
I think this is the same thing.
Mhm.
>> Okay, let me run this.
>> Okay.
Import necessary modules. Create a new USD stage. Define a transform X form primitive. Define a sphere primitive as child transform. Yes. Define a blue cube as background prim display assets.
Okay. So this is our thing. Oh [ __ ] That is awesome.
>> Damn.
So this is on a time frame.
>> No, this is not on this. We have not done the time frame stuff yet. We have just defined a new stage file called time sample code or time sample USDA.
File path is assets time code sample USDA.
Uh stage is USD.stage create new stage like for the file path. So this uh file is used to create the new stage.
>> Mhm. And then we have defined a transform primitive at world. So remember how we were doing it in prim.
>> Yeah.
>> So we have just use the xform usdgm.xform API to define this uh stage.
>> Mhm.
>> And then we define a sphere primitive as child of the transform at world sphere.
So this is how we define the child. Uh you know sphere is USDGM.phere equals to usgm.spere.
It's going to be stage comma world.getpath.append path sphere.
This is how this is the typical syntax for defining a like an object as a primitive as a child of a stage.
And then we define a blue cube as background prim.
So this is the blue cube over here that we seeing as the background prim box is usgm.cube usgm.cube.define >> stage uh comma world dot getpath append backdrop. So this they are going to use backdrop as its name. I think that this is because backdrop is something that is already defined in this USDG.
Cube API.
Um, yeah, I'm still a little bit confused about how that API operates exactly because they just name stuff over here like backdrop and it just magically becomes like a background thing.
>> I think all of this is predefined in these APIs. We still need to look at those API docs, bro.
USD GM API docs, bro. There was a list the core schema for defining interchanging.
I don't know where the [ __ ] USD go and then cube X form define get Get schema static define get.
Okay.
Okay.
So what over here what h what's happening is they set it for one. So box dot get display color attribute set this to 0, 0, 1. Cube xform API equals to usgxform common API. What does this mean, >> dude? That that's just uh a wrapper. It wraps your box into the XOMO API, I think.
>> Okay.
>> Yeah, it's a wrapper.
>> And this is I think this is where we are defining uh >> so once we once you wrap the box in a wrapper then you can translate it over an axis. That's how it does it. So X for common API gives you gives you the power to you know translate over an axis. That is one of the feature of the X X form common API.
>> Mhm.
>> It it is usually used for you know uh transitions as we as we do remember in our initial uh streams when we went through >> the API it is usually used for geometric uh uh translation and all those kind of things.
>> Yeah. Let me just be sure.
>> Mhm. And oh my god.
The code is essentially building a backdrop for your scene. You can think of it as a hanging Lu. Okay, we know this backdrop. Okay, painting it. Oh, this is just setting the color as RGB.
So, RGB, this is blue. Oh, okay. Okay.
Okay. And then uh cube xform API equals to us gome.xform common API box.
Uh where is that?
Stretching it into a wall. Cube X form API dot set scale GF ve 3F plane that take that cube and squash it. What the hell?
By making it five units wide the tall units uh point one thing you have turned 3D block into a flat white panel as a piece of plywood. Okay. Pushing it back plane move this panel 2 units away from the camera.
You move Z equals to Oh, we can do all this [ __ ] as well just using this cube X form API dot set translate of GFE 3D.
>> Mhm.
>> Create a cube, paint it blue, flatten it into white wall and side it into the background at as a strange stage floor backdrop.
I see. Okay.
But what does this line mean then?
Which one?
>> Box. It specifically skipped over the box line.
You created the backdrop wall.
>> Mhm.
>> USD go.x like some common API. This is a specific toolkit that open USD provides the assignment. You are wrapping the box in the toolkit you use simply simp you can use simple commands on it. Why do we need this remote? Normally we are using blah blah blah blah blah without remote control to manually write out transformation by using common API unlock common easy buttons and translate. Okay.
an easy to use interface so that you can move backdrop around.
Oh, so this is the line basically responsible for us to be able to move this block around like this.
>> Do you get it?
>> Which which line are we talking about?
>> This X for common API thing that it's using.
>> Yeah. And then >> this is the line responsible for us to be able to move around this thing easily because look at this what it's saying.
H normally moving things in open USD is incredible math heavy and annoying.
Without the remote control, you would have to manually write out transformation matrix. A big grid of numbers that handle the math for you.
Using the X form common API, you unlock the common easy button set, translate, move, turn, stretch. The simple analogy, the universal remote. Imagine you just bought a complicated high-end TV. You could open the back and rewire the circuit board every time you want to change the volume. Instead, you buy a universal remote X form common API and point it at the TV.
>> Now you can just do volume up, volume down, and all that [ __ ] >> I see. I see.
>> Makes sense. So, so it's so it's a wrapper, right? It wraps it wraps the prim into that API so that we can do we can have fun with it basically, right?
>> Exactly. Yeah. Do you know uh have you seen that video from SpaceX? Oh, show open it. Go to YouTube. I will show you right now.
>> Uhhuh.
>> Go to YouTube and type SpaceX and Elon Musk.
I think you would. Yeah.
Uh no, no, no. Go down. Go down.
Wait, let me send you the link. I saw that video and thing and Elon did use the same thing for SpaceX >> like the X for API.
>> Yeah, I for sure SpaceX. Wait, >> is this the one? Wait. Uh, no, no, no.
Yeah, this the the fu type the future of design. The future of design. Just search future of design is going to show up.
The future of design.
>> This one.
>> This one.
>> Yeah. For this I think he has used open >> USD and we're trying to create these 3D objects using variety of 2D tools and it it just it doesn't feel natural, doesn't feel normal the way you should do things. So, we started playing around with the idea and using a few of things that are available out there such as the Leap Motion and Seaman's NX which is what we used to design the rocket and we wrote some code to integrate the two and we started with what you see here. So he's not going to show how he has used it but he >> like the way he showcases it right like the moment >> and what I can do is I can go and grab it and I can rotate it multiple dimensions >> and then what I can do is I can put another hand in there and I can zoom I can zoom in and out on the on the wireframe and then I can also translate it so I can move it around the screen and then zoom and translate.
And this is what we we started off with a few months ago.
>> And this is how I think he was able to render the whole thing out.
>> Spin it and then catch it.
>> What do you think?
>> A fun way to >> Yeah, this is definitely the same thing.
>> Right.
Yeah, but it's it's using hand gestures and motion sensors just you know he is Elon Mus. So >> definitely he won't be doing simple [ __ ] wireframes to to actually use a a full 3D CAD model of the engine.
So here what you're seeing is the actual interaction with the CAD software manipulating the real 3D model of the Merlin engine just using hand gestures.
If you can just go in there and do what you need to do just understanding the fundamentals of how the thing should work as opposed to figure out how to make the computer make it work then you can you can achieve a lot more in a lot shorter period of time. So then we went to a a 3D projection. We started off with the kind of 3D projection that you're familiar with in the movies where you use 3D glasses.
We also did a freestanding glass projection.
>> Yeah, bro. I understood.
It's pretty much the same idea of doing the X for API, but yeah, they just doing it at a very sophisticated high level.
>> Yeah.
All right, let's move forward. um setting start and end time codes. Time code specific specifies an exact frame or moment in the animation timeline. It allows for precise control over time. Are you able to see or no?
>> Yeah. Yeah, I I'm able to see.
>> Okay. Read this first example.
The time code specifies an exact frame or moment in the animation timeline. It allows a precise control over timing of change to properties enabling smooth and accurate animation of the 3D objects.
So a USD CPP is it is it C++?
>> Yep, I think it's C++.
USD time code. A USD time code is therefore unitless generic time measurement that serves as the coordinate for the time sample data in USD file.
USD stage defines the mapping of the time code unit like seconds and frames.
What does that mean?
>> Unitless. Okay. USD time code therefore generic time measurement that serves as the coordinate for time sample data in USD files. Correct. USD stage defines the mapping the mapping of time codes to units like seconds and frames. Defines the mapping of time codes.
Units like second. Okay. to set the stages start time code and end time code metadata.
Start time code and end time code metadata. Use set st start time code and set end time code methods. Okay, got it.
So basically we're going to open a stage.
Uh we're going to use the same USD stage dot open.
We're going to start set the start and end time codes for the stage. Stage dot set start time code is one and the end time code is 60.
>> Export a new flattened layer for this example.
>> Cool.
>> Wait, I'll be back. Give me Give me a minute. I'll be back.
I take some issue.
Boom. Boom. Boom.
>> There we go. Yes, sir.
>> Oh, some guy in the chat has put something, bro, for us.
>> What? Open Swarm is an opensource multi- aent AI team built on agency. Swarm was made open source. So you know let's see what this open form thing is.
>> I think this is something that he might have created.
>> Multi- aent orchestrator. I think I've already heard about this >> open swamp. I have heard about Hermes.
>> Yeah. Yeah. Yeah. I think I've already heard about this >> open AI team. Autonomous AI team. Wait, >> an AI army at your fingertips. Your free and open source mission control center for swarm of AI employees. H now in beta. Try it free. Download for Mac. I think this is some open claw [ __ ] with agents.
Oh, openwarm.com. I I was looking at the GitHub.
>> Just describe it. Open.
>> Damn, bro. Cool UI. Cool UI. We should design something like this as well, >> bro. This is definitely cloud design.
I'm 100% sure.
>> I The whole thing, dude. Even even the logo is I think similar to Claude.
>> The whole aesthetic is Claude design, bro. This is >> but it's not that bad, dude. It's not.
>> Yeah. Yeah. Obviously, it's not bad, bro. That's what I was telling you like the other day that everything is going to look like the same thing.
>> Let let me Dude, and anyways, this is an open source thing. So, >> yeah.
>> How many stars do we have? Oh, 420. So, this is something new.
>> Yeah, today he he he said uh Syan Dhar.
>> No, dude. But he's not the contributor.
>> I know, bro. He's just a guy who put it in chat.
>> No, no. I thought he was contributing over here, but I think >> No, he was just he Okay, let it be.
Let's focus on this.
>> Got it. Uh, open stage from starting point USDA.
Set the start and end time codes. Okay.
Export new flattened layer for this example. Stage.export assets time code ex1.
USDA. What does this mean? But let's run it first.
True.
Okay. Show us USD.
What does that do?
Nothing. This the same thing.
Wait. Go up.
I think this is just set. Okay. We are starting throw node the stage.
Let me read over here. Bro, what what is it trying to do?
Uh, open stage from starting point done.
Set the stage. So, we are just setting the time code at one for the stage and stage. Okay.
But okay, but what is happening over here? I'm not able to understand.
>> Yeah, I'm also I'm also confused right now. That's a Gemini.
Okay. Setting the in and out points.
Stage dot set start time code one. Stage dot set end time code 60.
uh analogy. Think of this like start and end markers of the video. What it does is you're telling OpenUSD that this specific scene begins at frame 1 and ends at frame 60. Okay? Even if you have animation data at frame 500, a player like USD view will only play the loop between 1 and 60 because of these settings. It defines the active window of your scene.
Exporting the final cut.
The action. This saves you your work to a new file on your computer.
Okay.
Uh the flattened layer means the export command creates what is called a flattened file. In open USD you often have many layers like transparent sheets stacked on top of each other. Flattening takes all those layers and bakes them into one easy one single easy to read list. Okay, what does that mean?
flattening. So flattening means uh basically turning a 2D array into a 1D array. That's what flattening means.
>> Okay.
>> Yeah. So if you have like three-dimensional ve array or fourdimensional array then you can use flattening to convert it into a single array. So that becomes really easy for us for us to understand. That's what basically it means. But uh how does it tell the stage to run frame one and then save everything we have done into a single file called? Oh, okay. Wait, it's saying that it's going to save everything in a single file USDA.
But set start time code one.
>> Okay. Wait. Tell the stage to run from frame 1 to 60. Then save everything we've done into a single clean file.
time code but what's the point like I'm not able to understand okay they how is it running from 1 to 60 in one block >> yeah that's what I'm also confused with so since you when when you open the new file in the pre >> anybody in the chat >> any anyone No m >> six. But it it's moving right like if you go down go down it's just it's just this like it's whatever we did.
>> Okay. Leave it. Leave it. Leave it.
Leave it. But it it is still moving on its own. So what if we run this code in our system? What happens?
>> Yeah. Same thing. It's the same thing.
>> Wait. No. Just leave it. Like this is not the code, right? Or is this?
>> No. This is the code. This is the code.
Oh, this is the same code that they ran.
>> It's going to export.
>> They've just put it in the top layer.
Top of the layer. I don't know what that means.
Wait, let me ask a better model.
Why are we storing it in the top layer?
What's when does the frames run?
Oh lord, bro. I hate [ __ ] Mac.
Oh, you are just adding two numbers into the scene. You're not telling it to animate.
When you call stage dot set start time code one, you're not telling it to animate. You're just writing two numbers into the scene. If anyone plays this scene, the valid timeline runs from 1 to 60.
Okay.
USD is built in layers.
Think Photoshop layers, but for 3D scenes, you might have a base layer with geometry, another layer with materials, another with animation all stacked into one stage.
Start slash end time codes are stage metadata not data on any specific object. They describe the whole composition by convention. USG writes that kind of global metadata into the root layer the topmost one.
Okay.
Okay.
Is your open USD file stamp start one and 60 onto stage metadata. Export the results to a new file.
Okay. So, we're not playing anything over here. Got it.
>> Yeah. Yeah. So, it's But it does say But it does say it will render from 1 to 60.
>> No, no, no. It just says it that at frame from frame 1 to 60 if a like a if a software is trying to render it. So from frames 1 to 60, you need to show this.
>> That's what it says. I think >> okay, some complicated [ __ ] Stage.export. So this is just exporting the flattened layer of for this example in the top layer uh into a new file basically.
So uh display USD assets time code ex1 USD okay setting time samples for attributes time samples okay let's read over here example two come on read it example two time the time sample represent a collection of attribute value at various points in time allowing open USD to interpolate between the values for animation proc purp purposes.
When animating an attribute, you define a time code at which the value should be applied. These values are then interpolated between time samples to get the value that should be applied at the current code. To assign a value at time code, use the set method.
Okay. Oh, it's the same. We use the set meth method as usual to assign a value.
And if you want to set the size of cube to one at time code one. Oh, okay. Okay.
This is where we are going to render or animate something. Yes, there we go. So, we have a cube size attribute and then we are going to get the size of the attribute.
>> Mhm.
>> And then at time one, we are going to set the value one. And at time 60, we are going to set the value 10.
>> Okay. So as as the frame moves by >> mhm >> it's going to the the size of the cube or the value that >> oh okay okay so okay let me read that one more time um I got it I understood this >> time samples represent a collection of attribute values at various points in time allowing openg to interpolate between them. So this is the animation process when animating an attribute you define a time code at which the value should be applied. Okay. So, time code at which the value should be applied.
These values are then interpolated between the time samples between time samples to get the values that should be applied at the current time code. To assign a value at a particular time code, use the set method. Got it? Set uh takes two arguments. The time code and the value to assign. Got it? For example, if you want to set the size of the cube to one at the time code 1 and 10 at the time code 60, you would do get size of the attribute cube size attribute USD attribute cube dotprim dot get size attribute. Okay, set the size of the cube at time 1 equal to 1. So cube size attribute set time equal to one value equal to one. Okay, so at frame one the value is going to be one.
At frame 60 the value is going to be at 10 right USD will interpolate the values from the cube size attribute between the set time samples okay um let's create the sphere that moves up and down using xform common API got it okay bro I think now is something crazy is going to Woo! Time for the magic. Time for the magic to happen.
Oh, animation.
Okay.
Damn, bro. How? Wait, dude. This is this is some advanced [ __ ] Go back to the basics, man. Go back to the basics, please.
>> No, no, I understood, bro. It's very easy.
>> Yeah.
>> Yeah. Yeah. Uh what's happening over here is basically so >> Oh, no. I get it. Yeah, I can see it.
That's how we are doing time one time, >> bro. This is just It's like very simple interpolation, bro. It's there.
>> Oh, okay. Yeah, I can see the axis set on Yaxis. We are doing on the Yaxis, right?
>> Huh?
>> Yeah.
>> Easy peasy. at time 1 30 45 50 60.
>> So, so like okay at 1 it's starting from here two.
>> Yeah.
>> Uh 130 45 60 and then basically that's just giving us an illusion of the ball bouncing.
>> It's not actually bouncing. It's just present at that moment over here.
simple.
It's pretty simple if you think about it.
>> The code is easy.
Code is very basic over here. M >> um I think there should be like some sort of for loop or something that should >> I think I think as soon as we move ahead and go more deep into open USD we might we we would be uh I think open to more complex it's like a game they're trying to teach us through step by step >> and then they're going to give us a big villain that we have to defeat a boss level >> I see >> or something.
Oh, okay. So, this was pretty easy. I'll just go through the code one more time just so we are sure that we didn't miss anything.
>> Um, so open stage from example one. We just open the stage. We just again uh loaded a sphere u that we had over there.
Create clear any existing translation.
So, if translate atr is not equal to sphere.get Get translate op get attribute translate. So this is just clearing any translation that was previously happening on that sphere.
>> Makes sense.
>> And then create xform API object for the sphere. So sphere xform API equals to us gm xform common API sphere.
Okay.
and then set translation of sphere at time 1 and then time 30. So this is just set setting the translate and this is XYZ coordinates and but one thing I didn't understand over here so does this matter like over here they were doing time first and then value second but over here they are doing value first and then time second.
Uh it depends upon the API and >> this is a different uh function as well.
This is set translate. This is >> Yeah. So it depends upon so yeah so it depends upon the API like what arguments is is it going to take. So for for that if the arguments are like okay first you have to pass on the vector information and then you pass on the time information. So I think >> this whole API thing is really confusing like I don't know where that documentation is exactly from dude.
document doesn't exist. It's over here.
But it's like okay as as we move through we will eventually learn like you cannot like basically learn by hard anything.
>> Yeah. Yeah. But for example we are doing USD GM right or what?
>> Yeah. Yeah. But anyway like AI is going to code us for that. So we just have to understand what it does.
Common API attributes is P. Okay. Methods.
Got it.
Okay. Whatever.
This is some insane [ __ ] >> And this is how the USDA file looks like for this.
>> Yeah.
>> Okay. Let's go down.
>> Yeah. we going to read from here.
So I think we can move to this. So time samples can be used for baked per frame animation and it's good for interchange that is reproducible. However, time >> However, time symbols are not a replacement for >> animation curves. Curves curves >> curves >> because I think to perform like some sort of distortment in like a material, you can't just use time samples, right?
Like you can use it for like very basic stuff like bouncing a ball, >> but if you want to, >> you have to use geometry like some kind of parabolic equation or something. M >> that will give you that curve because then it's all about maths.
>> Yeah.
>> Right. Hyperbolic or sine wave or something like let's say you have water wave something like this you can use sine wave function that's going to do that.
>> Okay. And then for more complex animation it is not recommended to define the animation using scripting but rather than in digital content creation application like Houdini or stuff like that I guess.
So it is possible to set three time samples for different attributes. We can demonstrate this with the scale of the sphere.
Okay.
Uh it is possible to set three time samples for different attributes.
Okay.
So that's what they did here. Or is it the same thing?
H >> I think it's the same thing but let me check. open stage from 2A. So it's just loading a stage, loading a sphere. Uh if scale atr equals to scale sphere dot get scale op get atr scale clear. I think it's just clearing the scale. I guess sphere xform api equals to usgm.xform common api sphere. Okay. Uh again they're just setting the sphere to be used as from the USDX form API.
Set scale of the sphere at time one. So this okay 1 3 at one it's this at 30 it's this again.
Wait, at 1 and 30 it's the same, but at 45 the y-axis is reduced to 02 and Oh, wait, wait, wait, wait, wait.
>> It's it's it's basic. It's I think it's it's going to like uh reduce the scale up and down accordingly.
>> Oh, it's Oh, wait, wait, wait. Now, this is for the attribute of the sphere. You see it's getting compressed >> compressed and then you see there's like a >> thing happening with its geometry like it's getting like an oval thing when it's going up >> but uh now I'm confused that >> oh wait I understood bro I understood completely >> but but over here we using using set scale uh but then how is it translating I'm confused with that >> bro look at this >> scale >> it is possible to set time samples for different attributes. We can demonstrate this with the scale of the sphere. I I know I know but but uh my question is how are we uh translating like set scale is only to set the scale of that object right like you can reduce and increase it but now how are you translating on the axis >> I think that is because we are playing it from from the previous they have not like this is happening >> go up go up go up >> what >> go up yeah I want to take a look at the file. Okay. Oh, yeah. Yeah.
>> Bro, they're using the same one. They're using the time code exe1 over here.
>> No, no, no, no, no, no.
>> Oh, execution.
>> So, that is the export from this file from the >> Now I'm confused.
>> Yeah, yeah, yeah. Go to this. Look at the line 27 over here.
>> Oh, yeah. See, they exported it to time code exe >> and then they are using it again and then they're rendering it.
>> Yes. So, so basically this USDA is already there when they're loading it over here.
>> So this is the bouncing is already happening. Now in this shell they are just adding the elements to the scale as well >> like the animation to the scale as well by adding this. So that is basically what it's doing is just you know creating like a bouncy effect.
>> Bouncy effect. Yeah, makes sense. This makes sense >> over here.
>> Uh, you see I think we can probably I think I can uh do this.
Wait, let me see if I can do this on my Mac.
I think I can.
Uh, if God allows.
Why not?
You have cloud core bro is going to allow you the chair, right? You the chair. Show me.
Where is this? Stage setting read me requirement security source hidden source.
Nope.
What?
Where is this time code? EX 2B USDA.
Okay, time for the truth.
Let's see what file not found. Why?
I don't know, bro. It's okay. Let it be.
Why? But I understood how they're doing it now.
Let's move on.
>> All right.
>> But where are we going to move on, bro?
We are done. Key takeaways.
>> We are done. Time for the quiz. Time for the quiz.
>> Wait, wait, wait. Let's read the key takeaways first. To sum it up, the time code provides a unitless time ordinate scaled to real world time.
>> Okay. Wait, wait, wait. There's a guy in the chat. He's asking he's he's here for the first time. Can you explain quickly what you are doing?
>> So, >> do you want to explain or should I explain?
>> You can go ahead.
>> Okay. Shantu, say hi again so that we know you're listening and we're not wasting our energy by explain it again.
Again, just say hi one more time in the chat.
>> I think dude, we missed missed him. It's fine. Is anyone viewing us?
>> Bro, you're going to lose your mind. You know how many people like I think today's stream was like the highest grossing stream. Like three people are still watching us.
Okay.
>> At peak there were like 12 people watching us.
>> So if if those three people can say hi it would be really you know great.
>> Oh yeah they okay okay.
>> Okay. So what we are Yeah. Yeah. Yeah.
I'm going to tell you guys everything.
So we're trying to build a startup called instructs.world world where we are basically going to be. So for robots they have these policy models that they work on, they operate on. So what we are trying to do is u improve those policy models uh by you know helping create digital twins for the environments that they're going to be training in and simulating the training required for them to perform the niche tasks that they're going to be assigned with. So once they are trained enough in this digital environment, they're going to keep improving their tasks. So like for example, they're going to improve their dexterity. They're going to improve their, you know, uh failure detection so that they know what strength to use to hold what object and how to keep it on a table or you know all sorts of stuff like that. So what we are trying to do is we're just trying to create a dashboard uh that would basically provide the robotics teams who operate these policy models for their robots uh with a dashboard that is going to have multiple agents run uh these physical AI workflows for them. So what these physical AI workflows do is uh they basically operate on five pillars over here. So first is the coverage gap analysis. So this basically tells us where the robot is failing, how is it failing, what scenario and then second is scenario generation. So what scenarios should be generated synthetically so that the robot can complete its training and not fail in the real world. And then how do we evaluate those trainings is going to be the third pillar. And then when do we need to retrain? Um so is it going to be like a cron job? uh like do we need to retrain at the end of every week or you know after some sort of iteration and then basically how do we you know amalgamate all these training learnings from the robots in a policy model and aggregate those in a compounding library um and so that those libraries can be used across all the policy models across all the robots um so that's pretty much what we are trying to uh over here and then for that we need to rely heavily on you know uh Nvidia's techstack which is Omniverse or ISAC sim or ISAC labs which are just you know some software that you use to simulate uh environments and to help robots train in those environments synthetically. Um so that uh they basically learn in those environments and you know it just saves a lot of money because right now there's like a lot of money and time involved in training these robots via maybe using imitation learning or teley operation or all sorts of stuff like that. So to avoid that we are moving towards the synthetic generation of these environments where the robots can train and to do that we would require a deep understanding of you know how sim works, how isac lab works, what is nvidia omniverse, uh what are the world foundational models, what is a world action model and all sorts of stuff like that. And um so for that we basically took a step back and realized that it's really important for us to you know get an understanding of open scene description which is this >> wait it is not that.
>> Oh no wait open USD wait >> yeah.
Oh, this >> this >> so this was developed by Pixar Animation Studios.
>> Yeah.
>> And it gives you basically power to animate different kind of uh objects. So that's what we trying to do. So if sh you can show some of the examples of the what we have rendered till now on our notebook.
>> Yeah.
>> Yeah. So the these are some of the cool animations that you can do with this libraries over here. So you can you can make a ball bounce, you can make the ball uh you know have some fluid motion and all those things. To to do that we have you can use this open USD library that is uh that is available in both Python and C++ since Python is a really uh friendly language in like understanding and sorry friendly syntax for that part. uh I think so you can do like basically different kind of shader movements you can put any objects so for example over here we have a plate and on that we have put we have hovered uh we have kept a ball or something kind of like that so that ball can translate like on x-axis y axis it can bounce up and down or you can even change the color of the ball as well if you want uh you can material it into different kind of wrappers or anything if you look at our earlier streams that that we did yesterday. We we did we did take a look at the material API that helped us to you know uh try to like change the color of color color of our objects or wrap them in a way. So these are the some some of the cool things that you can do with open USD and when once you put all this all together uh you can train a robot in a simulated environment for example like training a robot in a AI training pack AI factory or a warehouse where the robot doesn't know about anything about the warehouse but eventually it's going to know uh once it gets trained and that thing can be replicated uh like to you know any number of people buildings or infrastructure like that.
>> I'm just going to use my cloud policy uh like the project to just you know >> like explain it to a 10year-old.
>> No, no, that's fine. You can do it. That's that's the best an analogy I would say if you're if you're able to explain it to a 10-year-old. Oh, yeah.
So I hope that answers a little bit of what we're doing. Shantanu Chandra 225 >> and thanks for joining our stream.
>> Yes sir.
>> Very motivating. This is very motivating.
>> Yep. Yep.
>> Okay. So I think Claude has given us like a decent >> Damn, bro.
Oh, claw can do such cool animations.
>> Yeah, you didn't know.
>> No, bro. I only use I'm a pro user of claw code on terminal. I don't like to use the web part. So, I don't know.
I still have to do the claw design, but I do >> work work and work.
>> Yeah.
So this is like a decent explanation over here expressed in USD.
So yeah, that's pretty much what we're trying to do over here.
Um, so I think we should move forward with the quiz now.
>> Yeah, dude. Let's let's focus on the quiz.
>> It's 116.
Oh, [ __ ] >> Dude, it's >> already 11:16.
>> Yeah, bro. It's already 11:16.
>> Oh my god, bro. Do >> Do you have office tomorrow? Like >> Yep. Yep. Yep. I need to go to the office tomorrow.
>> Oh, you have to? I thought it's hybrid, right? You were planning to go only on Tuesdays.
>> Yeah, but I need to go at least like a couple of days. So >> Oh, okay. Okay. All right.
>> Yeah.
God damn. Okay, let me quick quick quickly.
Bro, this is [ __ ] bro. Notebook LM does not capture the [ __ ] thing.
>> We can use CL code as well, you know.
Okay, the quiz is ready.
>> No, this is the earlier one, like the old one. Uh, I see.
Uh, make a coil, but I don't think Claude takes So, nice.
Guys, if you're watching, spam highs in the chat. We're going to shout out your name.
Okay, bro. Let's start this.
>> Okay. USG has a time code for equal to 30 and attribute has time sample author.
But dude, it doesn't know the pattern the way.
>> No, no, no. This is really good. Like this is better, bro. Like uh because we had like options in notebook LM. You're like trying to do the elimination thing and not >> No, but that's that that's how that's how the pattern would be.
>> Bro, but this is going to be like more challenging for us to remember the concepts. And we're going to do the notebook one as well. Like this is just 10 questions, right?
>> Sample 30. How many real world seconds does the animation span as? 30 >> has time codes per second 30. Okay. An attribute has time samples authored at 0 60 and 150.
>> Three, >> two, and then 0 2 3 4 5 6 five.
>> So, so I would say only three, right?
Three attribute time code is 0 60 and 150, right? So, uh, it should be 30 / 60id by 30.
>> 5 seconds, bro. 5 seconds. 5 seconds.
>> Yes. And 150 / 630.
>> 5 seconds.
>> Okay. Yeah. Five.
>> I think it's going to be five.
>> Yeah. Five.
>> Yes, sir.
>> Five.
>> True or false? Uh, time code in Open USD has units of seconds. False.
An attribute has time samples.
An attribute has time samples at time codes 10 and 30. The stage is queried at time code 20. What value is returned and how is it computed?
>> Interpolated.
It is linear interpolation between the attributes of of time code 10 and time code 30.
>> Revel.
>> Yes. Yes sir. Linear interpolation >> surrounding samples are time code 20 midway 10 and 30. Yes sir.
>> Which two methods on USD set the animation timeline boundaries >> dot set.
Uh wait fetch two methods on USD dotstage set the animation timeline boundary. I think.
>> Yeah. Dot set with uh >> dot dot set >> set. No, no, it's something set something. It's It is It is like >> No, no, no. More up, go up, go up, go up. It was in the post. Like, go up. Go more up. Go more up.
>> This is what it is. UD attribute set.
Uh, >> no, no, no. Go up, go up, go up. Is this the one? No, there is one more. Yeah, the set set start time code. Is this the one? set start time code I think.
>> Oh >> for boundaries.
>> Yes. This is how you define the boundaries right like start and the end of your time of your time sample.
>> But that was not the question. I think animation timeline. Oh no. You're right.
You're right.
>> Right.
>> Set start time code and set end time code. You're right.
>> Yeah.
Yes sir.
>> Yes sir.
>> Set start time code and set >> the following line return.
>> Get display color attribute. Wait a list. I think it returns a list of time samples.
>> Get display. Wait wait wait wait. Don't get color get display color attribute.
>> Yeah it returns it return it it returns a list of time samples. I think so.
Yeah, it returns a list of time samples.
>> List of time samples, but also I think it returns a list of time code with the color associated at that time code.
I think no attribute associated at the time code, not the color >> color attribute, bro. That it says get display color attribute color attribute.
So I'm saying the attribute values.
Attribute values. And so it's a key value pair. Remember it's a key value.
>> Yeah. Yeah. So the value is going to be >> No, I think the value can be anything.
RGB value, right? So it's going to be some numeric value.
>> Oh, yes. Yes. Yes. RGB.
>> Yeah.
>> Let's see what this is. A vector list.
Yes, you're right.
>> Time samples are authored for that. uh >> it returns the time code themselves not the value of those time codes just the time code >> time code so no values only time code so if >> vector list of time code ordinates at which time samples are authored also >> so rather than returning the color it's only going to return the time code samples yeah I was correct >> in the example below how many samples are authored on x form operation translate what value is returned at time 4 37.5 go down.
>> What value is written dude? This is this is like >> minus okay 0 - 5 4.75 comma 0.
Yep. Minus 4.75 I think over here between 30 and Oh no no no wait wait wait wait.
I don't know how are you doing the maths but >> oh yeah minus 4.75 yes in the example how many time samples are authored on x form translate and what how many time samples right 1 2 3 4 5 time samples and then this is going to be minus 4 75 >> oh yes sir >> I am right 37 37.5 and I think five time samples. Yes, >> bro. Linear interpolation.
>> So what do you So you divided 37.5 divided by >> No, no, no, no, no. Not 37.5, bro. I basically did >> Oh, so >> four the the middle because it is the middle value between 30 and 45. I wanted to give the get the middle value between minus 4.5 and minus 5.
>> But but this is just like a ballpark number, dude. Like I was looking for the maths.
>> Yeah, this is not a ballpark number, bro. - 4.5 + 5 / 2.
>> + 5 / two. Okay. Linear or divide by two. Why?
>> Linear, bro. Linear.
>> Oh, I see. I see.
>> Interpolation is like they they they do like the equal weightage of the attributes.
>> Oh. Oh. Okay. Okay. Okay. Okay. Okay.
Okay. Okay. Mike, make sense. Makes sense.
>> That is simple math. um divide by two.
>> You're just adding 4.5 + 5 which is 9.5 divided by two it's going to be 4.75.
>> H makes sense.
>> Okay. What is the time?
>> What is the time code per seconds defined? And which layer value is used to interpret the boards?
>> Root >> or a stage? root layer. So >> okay root I don't know this I I'm not I'm not able to recall this >> the time codes per second uh is defined in the stage and which layers values used to interpret the time codes for a stage is the root root layer defined on a layer. Okay. And yes, the root layer.
>> Oh, bad game.
>> Okay.
Okay, I'm back.
>> Holy.
>> Yes, sir.
So, time code per second is a metadata defined on layer. Okay, it's a metadata.
The article specifies that the time code ordinate of all time samples are scaled to second is based on the value defined in the root theorem.
>> It's a metadata. Yes, the article notes that the samples are good for interchange and is reproducible but are not a replacement for animation curve. Why does this distinction matter?
Because we are not able to animate curves.
H because we need to use digital content creation tools for intricate animations.
>> Okay, now it's going to for an instruct bin picking scenario. You need to record >> wait. Time samples are baked per frame speed. Yes, linear interpolation between them. They reproduce identical across applications. Great for interchange.
But they cannot express curve types basier hermite in and out tangent control.
This was not in the >> this was not in the article.
>> This is some additional information we get. Beier hermite ease in ease out.
These are like front end animation things dude. Ease in ease out is a front end tailwind CSS library.
I think front end developers is anyone is over here bro in the chat. CAD.
>> No, like I was talking about >> in the chat. I think there should be some developers in the chat.
>> Who is >> say hi?
>> Oh, okay.
So, Shantan is asking, okay, so USD you said, how will you scale from that bouncing ball simulation to actual real working robots in factory?
>> Is this part time or Okay, he's asking if we are doing it part time.
>> Are you also taking AI help? Yeah, bro.
We are depending on AI with our lives.
>> Without AI, we have a lot of subscription, dude. We are completely surrounded by AI subscription.
>> Yeah, that's how you should be, bro.
Like, if you're going to be a psychopath and do everything on your own. Just forget it. You're not going to be able to compete with anybody in this in US.
>> All the time in US.
>> Yeah. At least in US. I don't know about India and [ __ ] >> Yeah.
Okay.
Uh, bezier curves, hermite splines, spleens or spline. I don't know what that is. Ease in, ease out.
>> And dude, he dude wait, we did not answer his questions properly. So he also said that how will you scale from that bouncing ball simulation to actual real working robots in factory.
>> Okay. So basically the thing that you see over here uh the code it generates a USDA file. This USDA file is an environment or a stage that gets rendered. So once we are you know good enough at generating these USDA files what our aim would be would would be to basically generate a whole environment based on some either input like photos or videos.
>> Let's say let's say we you want to design a warehouse or a room >> right. So this is like basic basic building blocks like first we are trying to see how you can uh render a ball then we got we are going to learn how to render a a block and then we are going to you know put together all the things to render a big room or something eventually but yeah I think sh is going to show you the vision that Nvidia Omniverse has >> bro that uh >> wait yeah like that. Oh, wait. Is that the one? I think >> no, bro. It's I don't know. It's It's some like I don't know why they >> I can we we we can use we can show the asset packs as well. Asset packs.
>> Dude, why the hell are you at the forum?
>> Yeah.
>> Okay. So, these are the asset packs.
So the USDA file that we are showing over here is so these USDA files come as a pack from these assets and we going to be able to render these environments completely if we download these.
>> Yeah. And then and as you can see the size of those packages is like 22 gigs 18 gigs and when you scale it to you know like a warehouse that is like 1,000 acres or something and you have a lot of robots running you need a lot of compute to render those things and eventually train your robots into that environment.
So it's a long long shot goal that eventually robots are going to take over our jobs. And so this is these are like the building blocks like you know how how how would I say is basically the industrial revolution uh but not for industries but for robots.
Yeah. Okay. Next question.
For an instructs binpicking scenario.
Do you want to read this or >> Yeah, sure. Sure. For an instructs bin picking scenario. uh you need to record a robot's uh joint trajectory over 4 second pick attempt at 60 Hz so it can be played deterministically in the evaluation what do you set it for time code per second start time code end time code and how many samples per joint attribute >> 4 second uh pick attempt at 60 htz. So our 60 Hz is going to be 1 by 60 which is going to be uh what >> 0.016.
>> Okay. How how did you calculate that fast, bro?
>> Calculator, bro. AI.
>> Okay.
>> Calculator and >> Yeah. Okay. So I think time codes per second would be 4 / 0.016 which is going to be 100 / 425. So time codes per second would be 25 and then start time code is going to be >> wait what did you said 4ID 0.016 016.
>> Yeah, >> it's going to be 250.
0. It's not 0.16. It's 0.0.
>> Oh, 250. 250. Okay.
>> Yeah.
>> 250. Okay. Time code scores. I I I think I might be like wildly wrong, but I think that's what it should be.
>> So, what do you So, what So, what do you set it for? Time code per second.
>> So, you're saying what is the answer?
250. So 4 seconds per attempt at 60 Hz 1 by 60 and then we divide 4. Okay. Yeah, I think 250 could be an answer. But time code per second. No, no, wait. We should multiply it, right?
>> 4 to Yeah, we should multiply it rather than dividing it.
>> It's going to be 0.064 >> 240.
I think time codes per second is going to be 240.
So over a 4 secondond f attempt at 60 Hz how it can replayed it can be replayed deterministically in in evaluation.
And what does start time code and end time code over here?
Start would be over a 4 secondond pick at time at 60 Hz. So start would be should be at zero.
No record at zero and then end would be 60 Hz replay in evaluation.
>> Let's see what >> but first wait. Okay you said 240 right?
So end could be 240 and then 60 Hz.
Wait 60. What is 60? So how how 7 hertz was 143 millconds, right? What was the calculation for that? Do you remember?
>> 1x 7 >> 1 by 1x 7.
>> So you're going to do 1x 60. So it's going to give you 16 seconds, right? 16 milliseconds >> probably. Yeah.
>> Right. So we have 16 milliseconds. And if we convert it into divide by what is how how much is 1 millcond in a second >> bro just 2 4 / 1x 60 which is going to be 4 into 60.
>> Okay. I think your answer is time codes per second should be 240 and I don't know about the start time and end time code because >> no that's what I'm trying to calculate since you have figured out time code per second right so uh we can do the maths 4 seconds per pick attempt at 60 Hz >> but that doesn't depend on >> no no no no at at 60 Hz you know what that means 60 Hz is the whole cycle right so if 7 Hz is 143 millconds then 60 Hz is 1 divided by 16.
Uh, right. So, it's it's like 16 milliseconds, right? So, >> oh wait, wait, wait, wait, wait. Time codes per second would be 240. Start time code would be one. End time code would be 240. That's what I think. And how many time samples per joint attribute? Um, no dude, I don't think end time code should be 240.
Time codes per second. Oh yeah, you're right. Wait. No. Time codes, bro. Let's reveal the answer. Let me see.
>> 60. It's 60, dude. Wait. And time code was correct. 240. 4 seconds into 60.
>> Yeah.
>> So, but how did the 60 came? One time sample per frame per h >> one time sample per frame per joint is equal to 241 samples inclusive of both end points or 240 if treating as open-ended. The key point keep time codes per second aligned with your sensor control rate. So time codes map one is to one with frames easier reproducibility. No rounding in benchmarks.
I see this is bro I think we should use claude. This is better.
>> Okay, >> this is better.
>> But then we then we would be able to provide him with all the information the guide that we did provided provided it to notebook LM >> bro that that [ __ ] was [ __ ] It was [ __ ] bro and notebook LM was [ __ ] It was it didn't >> but the thing is we are preparing for open USD certification.
>> You just want you just want more options right? I the thing is dude if you're preparing for >> you want MCQs right you want MCQs right?
>> No my goal is to because since we are preparing for an exam we have to do it in a certain manner that they have provided it but >> so that >> bro listen the questions in notebook LM were [ __ ] like >> well that's what I'm saying just upload the exam guide over here as well. Oh yeah, that I'm going to do I'm gonna create like a for tomorrow stream.
>> Yeah, >> I'm going to do like a complete Yeah.
>> Cloud code. Dude, I am I am advocate of cloud code. Dude, I would suggest anyone to use if they are trying to learn coding or anything any technical skill that they want to develop definitely go for cloud code. Dude, that is the best CEO, software engineer, principal engineer that exists right now. Dude, I have upgraded my plan from 100 to 200 for that only like clock is >> badass SAS SAS subscriptions two off evaluation scenario where author time code per second 20 legacy film and the time code per second 120 high rates uh regression plus runner queries both at 1.5 second do this is some [ __ ] reveal the answer >> mhm mhm Two of your evaluation scenarios were authored at time codes per second equal to 24.
Okay, bro. Wait, I didn't understand this completely as well.
>> Yeah. So, I was going to say like copy both of them and then >> Mhm.
>> Dude, wait. Before we go in more deep, look at the time. Yeah, I think we're just going to read this one, reveal this, and just stop after.
>> Yeah, >> two of scenarios were Yeah.
>> authored at time codes per second 24 legacy film convention from vendor asset and time codes per second 120 high rate sensor capture a regression test runner queries.
Wait, two of your evaluation scenarios were authored at time code portal 24 legacy film convention 120 high rate sensor capture a regression test runner queries both 1.5 seconds in 1.5 okay so 24 + 12 36 I think 36 and 180.
Answer should be 36 and 180.
>> Revel.
And what's the operational risk if your test harness ignores this metadata?
>> The operational risk would be I don't know.
>> Reveal reveal.
>> Yes, sir. 36 and 180. I was right.
>> Mhm.
>> Time code 36. 1.5 seconds. 24.
Some quick math.
>> 24.
>> Quick math.
And the exactly the kind of silent benchmark drift the okay whatever annoying audit traceability for pattern 19 lessens the runner queries in seconds never in raw time codes and reads >> time codes >> pattern thing >> it's because I have it in the >> Yeah Bro, >> but you're making progress, bro. Like, >> yeah, bro. I'm not.
>> I'm not disagreeing, bro.
>> Day one.
>> One day at a time.
>> One day.
>> One day at a time. Day one. Amazon mentality. Jeff Bezos.
>> Jeff Bezos.
>> Day one, brother. It's always day one.
>> Always day one. All right. I think only one guy is watching us, you know.
>> Um >> I think >> it was a successful stream again.
>> Yeah.
>> And we are supporters. Thanks for the supporters.
>> Yeah. And we've like breaken our own record. Like we're breaking our records every day, you know. I think what what are the number of views today? Let me check.
97 views.
>> Oh my god. Oh my All time high.
>> Holy [ __ ] Let's go.
>> Let's go, gang. Let's go.
>> All right. All right. Time to say good night and goodbye to our >> All right.
>> Followers and supporters.
See you tomorrow, guys. Same time.
>> Two hours done.
Get the ne was there.
Related Videos
Agentforce NOW AMA: Build with React and Salesforce Multi-Framework
SalesforceDevs
490 views•2026-05-28
How agent o11y differs from traditional o11y — Phil Hetzel, Braintrust
aiDotEngineer
450 views•2026-05-28
WEB TECHNOLOGIES UNIT-2 | Degree 4th sem BCOM Computers web technologies unit-2 full explanation💯✅
LearnwithSahera
1K views•2026-05-29
More tests are always better? How to use AI to identify tests that bring little value
Alliance4Qualification
335 views•2026-05-29
Search Algorithms Explained in 60 Seconds! 🤖💨
samarthtuliofficial
218 views•2026-06-01
People of Game of Thrones using JavaScript DOM
AltCampus
296 views•2026-05-30
Introduction to Problem Solving Part - 1 | Lecture 1 | Intermediate DSA
ascensionix
107 views•2026-05-29
So What's Odin Lang Even Good For
TechOverTea
131 views•2026-06-01











