Updating Unproject
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
1:03A few words on art, originally produced remotely by Yangtian Li, and then produced in-house by Anna Rettberg
🗩
1:03A few words on art, originally produced remotely by Yangtian Li, and then produced in-house by Anna Rettberg
🗩
1:03A few words on art, originally produced remotely by Yangtian Li, and then produced in-house by Anna Rettberg
🗩
4:35Run the game to see what on-demand, in-house art production would entail
🏃
4:35Run the game to see what on-demand, in-house art production would entail
🏃
4:35Run the game to see what on-demand, in-house art production would entail
🏃
7:07Determine to focus on the camera for starters, then the lighting bounds
🏃
7:07Determine to focus on the camera for starters, then the lighting bounds
🏃
7:07Determine to focus on the camera for starters, then the lighting bounds
🏃
9:34Consider the current LightBounds code
📖
9:34Consider the current LightBounds code
📖
9:34Consider the current LightBounds code
📖
10:29Increase the LightBounds, running the game to illustrate the need to move to a camera-centric lighting bounds
🏃
🖮
10:29Increase the LightBounds, running the game to illustrate the need to move to a camera-centric lighting bounds
🏃
🖮
10:29Increase the LightBounds, running the game to illustrate the need to move to a camera-centric lighting bounds
🏃
🖮
12:04Make UpdateAndRenderWorld() draw the LightBounds
12:04Make UpdateAndRenderWorld() draw the LightBounds
12:04Make UpdateAndRenderWorld() draw the LightBounds
15:00Run the game to see the light bounds
🏃
15:00Run the game to see the light bounds
🏃
15:00Run the game to see the light bounds
🏃
15:18Make UpdateAndRenderWorld() draw the WorldCameraRect
15:18Make UpdateAndRenderWorld() draw the WorldCameraRect
15:18Make UpdateAndRenderWorld() draw the WorldCameraRect
16:44Run the game to see that WorldCameraRect, and determine to fix its computation to encompass the screen
🏃
16:44Run the game to see that WorldCameraRect, and determine to fix its computation to encompass the screen
🏃
16:44Run the game to see that WorldCameraRect, and determine to fix its computation to encompass the screen
🏃
17:44Determine to validate Unproject() for GetCameraRectangleAtDistance() to produce a correct WorldCameraRect
📖
17:44Determine to validate Unproject() for GetCameraRectangleAtDistance() to produce a correct WorldCameraRect
📖
17:44Determine to validate Unproject() for GetCameraRectangleAtDistance() to produce a correct WorldCameraRect
📖
20:13Make GetCameraRectangleAtTarget() take a Z, and try dynamically changing the TargetOffsetZ in UpdateCameraForEntityMovement()
20:13Make GetCameraRectangleAtTarget() take a Z, and try dynamically changing the TargetOffsetZ in UpdateCameraForEntityMovement()
20:13Make GetCameraRectangleAtTarget() take a Z, and try dynamically changing the TargetOffsetZ in UpdateCameraForEntityMovement()
25:39Run the game to see that camera move
🏃
25:39Run the game to see that camera move
🏃
25:39Run the game to see that camera move
🏃
25:49Make UpdateAndRenderWorld() pass Camera.OffsetZ to GetCameraRectangleAtTarget()
25:49Make UpdateAndRenderWorld() pass Camera.OffsetZ to GetCameraRectangleAtTarget()
25:49Make UpdateAndRenderWorld() pass Camera.OffsetZ to GetCameraRectangleAtTarget()
26:49Run the game and determine to fix WorldCameraRect to encompass the screen
🏃
26:49Run the game and determine to fix WorldCameraRect to encompass the screen
🏃
26:49Run the game and determine to fix WorldCameraRect to encompass the screen
🏃
27:04Work towards making the WorldCameraRect encompass the screen, considering how Unproject() works
📖
27:04Work towards making the WorldCameraRect encompass the screen, considering how Unproject() works
📖
27:04Work towards making the WorldCameraRect encompass the screen, considering how Unproject() works
📖
34:06Step in to GetCameraRectangleAtTarget() to see our camera projection
🏃
34:06Step in to GetCameraRectangleAtTarget() to see our camera projection
🏃
34:06Step in to GetCameraRectangleAtTarget() to see our camera projection
🏃
39:37Closely consider Unproject()
📖
39:37Closely consider Unproject()
📖
39:37Closely consider Unproject()
📖
46:50Step in to Unproject() to see that the Proj combines the world camera transform and the projection matrix
🏃
46:50Step in to Unproject() to see that the Proj combines the world camera transform and the projection matrix
🏃
46:50Step in to Unproject() to see that the Proj combines the world camera transform and the projection matrix
🏃
48:53Continue to nail down our understanding of Unproject()
📖
48:53Continue to nail down our understanding of Unproject()
📖
48:53Continue to nail down our understanding of Unproject()
📖
50:05Step in to Unproject() and consider that its ClipZ computation may be erroneous, thus throwing off the Clip
🏃
50:05Step in to Unproject() and consider that its ClipZ computation may be erroneous, thus throwing off the Clip
🏃
50:05Step in to Unproject() and consider that its ClipZ computation may be erroneous, thus throwing off the Clip
🏃
55:27Fix the computation of ClipZ and ClipSpaceXY in Unproject()
55:27Fix the computation of ClipZ and ClipSpaceXY in Unproject()
55:27Fix the computation of ClipZ and ClipSpaceXY in Unproject()
56:39Run the game and fail to see our WorldCameraRect debug visualisation, but that the ScreenBounds is now correct
🏃
56:39Run the game and fail to see our WorldCameraRect debug visualisation, but that the ScreenBounds is now correct
🏃
56:39Run the game and fail to see our WorldCameraRect debug visualisation, but that the ScreenBounds is now correct
🏃
1:00:06Step in to GetCameraRectangleAtDistance() to investigate the camera's dramatic Z offset
🏃
1:00:06Step in to GetCameraRectangleAtDistance() to investigate the camera's dramatic Z offset
🏃
1:00:06Step in to GetCameraRectangleAtDistance() to investigate the camera's dramatic Z offset
🏃
1:02:40Let Unproject() divide the ProbeZ.w in to ClipZ again
1:02:40Let Unproject() divide the ProbeZ.w in to ClipZ again
1:02:40Let Unproject() divide the ProbeZ.w in to ClipZ again
1:03:38Run the game to see that the WorldCameraRect now matches the ScreenBounds
🏃
1:03:38Run the game to see that the WorldCameraRect now matches the ScreenBounds
🏃
1:03:38Run the game to see that the WorldCameraRect now matches the ScreenBounds
🏃
1:04:04Read PerspectiveProjection() to confirm that the Z was multiplied in to the W
📖
1:04:04Read PerspectiveProjection() to confirm that the Z was multiplied in to the W
📖
1:04:04Read PerspectiveProjection() to confirm that the Z was multiplied in to the W
📖
1:06:41Run the game to see the WorldCameraRect move with the hero, and determine to make it slide with the camera
🏃
1:06:41Run the game to see the WorldCameraRect move with the hero, and determine to make it slide with the camera
🏃
1:06:41Run the game to see the WorldCameraRect move with the hero, and determine to make it slide with the camera
🏃
1:07:23Consider how UpdateAndRenderWorld() is using the camera transform, with a view to making the WorldCameraRect slide rather than jump
📖
1:07:23Consider how UpdateAndRenderWorld() is using the camera transform, with a view to making the WorldCameraRect slide rather than jump
📖
1:07:23Consider how UpdateAndRenderWorld() is using the camera transform, with a view to making the WorldCameraRect slide rather than jump
📖
1:13:38Step in to UpdateAndRenderWorld() to see exactly how the debug visualisation is being drawn
🏃
1:13:38Step in to UpdateAndRenderWorld() to see exactly how the debug visualisation is being drawn
🏃
1:13:38Step in to UpdateAndRenderWorld() to see exactly how the debug visualisation is being drawn
🏃
1:16:01Hit a crash in DEBUGEnd()
🏃
1:16:01Hit a crash in DEBUGEnd()
🏃
1:16:01Hit a crash in DEBUGEnd()
🏃
1:16:22Make DEBUGEnd() use SafeRatio0() in the AvgKilocycles computation
1:16:22Make DEBUGEnd() use SafeRatio0() in the AvgKilocycles computation
1:16:22Make DEBUGEnd() use SafeRatio0() in the AvgKilocycles computation
1:17:12Note that the WorldCameraRect is sliding subtly, but not actually with the camera
🏃
1:17:12Note that the WorldCameraRect is sliding subtly, but not actually with the camera
🏃
1:17:12Note that the WorldCameraRect is sliding subtly, but not actually with the camera
🏃
1:18:47Continue to investigate why the WorldCameraRect seems to be tied to the sim center, and not sliding with the camera
📖
1:18:47Continue to investigate why the WorldCameraRect seems to be tied to the sim center, and not sliding with the camera
📖
1:18:47Continue to investigate why the WorldCameraRect seems to be tied to the sim center, and not sliding with the camera
📖
1:27:01Consider that our camera's identity matrix may not have its offset set correctly
📖
1:27:01Consider that our camera's identity matrix may not have its offset set correctly
📖
1:27:01Consider that our camera's identity matrix may not have its offset set correctly
📖
1:28:29Step in to SetCameraTransform() to see that the camera's identity matrix actually does look good
🏃
1:28:29Step in to SetCameraTransform() to see that the camera's identity matrix actually does look good
🏃
1:28:29Step in to SetCameraTransform() to see that the camera's identity matrix actually does look good
🏃
1:30:54Break on SetCameraTransform() when moving between rooms to see that the camera's identity matrix remains looking good
🏃
1:30:54Break on SetCameraTransform() when moving between rooms to see that the camera's identity matrix remains looking good
🏃
1:30:54Break on SetCameraTransform() when moving between rooms to see that the camera's identity matrix remains looking good
🏃
1:32:01Break on SetCameraTransform() during a big camera move to see that the DeltaFromSim displacement is initially lower that expected
🏃
1:32:01Break on SetCameraTransform() during a big camera move to see that the DeltaFromSim displacement is initially lower that expected
🏃
1:32:01Break on SetCameraTransform() during a big camera move to see that the DeltaFromSim displacement is initially lower that expected
🏃
1:36:25Display the DeltaFromSim
1:36:25Display the DeltaFromSim
1:36:25Display the DeltaFromSim
1:36:57Run the game and watch that DeltaFromSim value to see that it looks fine
🏃
1:36:57Run the game and watch that DeltaFromSim value to see that it looks fine
🏃
1:36:57Run the game and watch that DeltaFromSim value to see that it looks fine
🏃
1:38:02Consider if Unproject() is not correctly applying the camera displacement
📖
1:38:02Consider if Unproject() is not correctly applying the camera displacement
📖
1:38:02Consider if Unproject() is not correctly applying the camera displacement
📖
1:40:06Realise that Transform() is multiplying the w in to the displacement, and make Unproject() use the ProbeZ.w in the Clip computation
1:40:06Realise that Transform() is multiplying the w in to the displacement, and make Unproject() use the ProbeZ.w in the Clip computation
1:40:06Realise that Transform() is multiplying the w in to the displacement, and make Unproject() use the ProbeZ.w in the Clip computation
1:42:04Run the game to see that we're not quite out of the woods yet
🏃
1:42:04Run the game to see that we're not quite out of the woods yet
🏃
1:42:04Run the game to see that we're not quite out of the woods yet
🏃
1:42:21Make Unproject() use ProbeZ.z directly (not divided by ProbeZ.w) in the Clip computation
1:42:21Make Unproject() use ProbeZ.z directly (not divided by ProbeZ.w) in the Clip computation
1:42:21Make Unproject() use ProbeZ.z directly (not divided by ProbeZ.w) in the Clip computation
1:43:27Run the game to see the WorldCameraRect properly slides with the camera
🏃
1:43:27Run the game to see the WorldCameraRect properly slides with the camera
🏃
1:43:27Run the game to see the WorldCameraRect properly slides with the camera
🏃
1:44:04Make UpdateAndRenderWorld() set the LightBounds from our WorldCameraRect, adjusted by the SimBounds Z
1:44:04Make UpdateAndRenderWorld() set the LightBounds from our WorldCameraRect, adjusted by the SimBounds Z
1:44:04Make UpdateAndRenderWorld() set the LightBounds from our WorldCameraRect, adjusted by the SimBounds Z
1:44:21Run the game to see that our lighting is never wrong
🏃
1:44:21Run the game to see that our lighting is never wrong
🏃
1:44:21Run the game to see that our lighting is never wrong
🏃
1:45:01Q&A
🗩
1:45:01Q&A
🗩
1:45:01Q&A
🗩
1:46:00jim0_o Q: How would you obfuscate what's outside of the view of the character?
🗪
1:46:00jim0_o Q: How would you obfuscate what's outside of the view of the character?
🗪
1:46:00jim0_o Q: How would you obfuscate what's outside of the view of the character?
🗪
1:48:26vateferfout Q: Do you plan to close the orphanage's rooms or do you want them to have the skylight as some sort of ambient light?
🗪
1:48:26vateferfout Q: Do you plan to close the orphanage's rooms or do you want them to have the skylight as some sort of ambient light?
🗪
1:48:26vateferfout Q: Do you plan to close the orphanage's rooms or do you want them to have the skylight as some sort of ambient light?
🗪
1:48:47sgtrumbi Q: Does the UpdateAndRender() function do any rendering right now? Or was it offloaded to some other place?
🗪
1:48:47sgtrumbi Q: Does the UpdateAndRender() function do any rendering right now? Or was it offloaded to some other place?
🗪
1:48:47sgtrumbi Q: Does the UpdateAndRender() function do any rendering right now? Or was it offloaded to some other place?
🗪
1:49:22jim0_o Q: Would you for example cast rays to see if something is visible to the character (e.g. if something is on the screen but the character should be blind to it)?
🗪
1:49:22jim0_o Q: Would you for example cast rays to see if something is visible to the character (e.g. if something is on the screen but the character should be blind to it)?
🗪
1:49:22jim0_o Q: Would you for example cast rays to see if something is visible to the character (e.g. if something is on the screen but the character should be blind to it)?
🗪
1:50:59jessef Q: Would Handmade Hero's chunk->offset world work in 3D? Would there be any problems there that I'm not seeing?
🗪
1:50:59jessef Q: Would Handmade Hero's chunk->offset world work in 3D? Would there be any problems there that I'm not seeing?
🗪
1:50:59jessef Q: Would Handmade Hero's chunk->offset world work in 3D? Would there be any problems there that I'm not seeing?
🗪
1:51:20sgtrumbi Q: Is there already new artwork to be put in the game in the next couple of episodes?
🗪
1:51:20sgtrumbi Q: Is there already new artwork to be put in the game in the next couple of episodes?
🗪
1:51:20sgtrumbi Q: Is there already new artwork to be put in the game in the next couple of episodes?
🗪
1:51:57Consider the problem of dealing with perspective in the art
🏃
1:51:57Consider the problem of dealing with perspective in the art
🏃
1:51:57Consider the problem of dealing with perspective in the art
🏃
1:53:39uhee Q: Is it currently possible to easily customize rooms, e.g. with non-random tile-z, etc?
🗪
1:53:39uhee Q: Is it currently possible to easily customize rooms, e.g. with non-random tile-z, etc?
🗪
1:53:39uhee Q: Is it currently possible to easily customize rooms, e.g. with non-random tile-z, etc?
🗪
1:54:05jessef Q: Sorry, I mean, say we wanted to make a universe-scale game, i.e. space sim. Would that scale well?
🗪
1:54:05jessef Q: Sorry, I mean, say we wanted to make a universe-scale game, i.e. space sim. Would that scale well?
🗪
1:54:05jessef Q: Sorry, I mean, say we wanted to make a universe-scale game, i.e. space sim. Would that scale well?
🗪
2:01:06Miblo Q: Would these massive distances even be needed if you don't need to be accurate to, say, the nearest centimetre? Or do you always need to be that accurate?
🗪
2:01:06Miblo Q: Would these massive distances even be needed if you don't need to be accurate to, say, the nearest centimetre? Or do you always need to be that accurate?
🗪
2:01:06Miblo Q: Would these massive distances even be needed if you don't need to be accurate to, say, the nearest centimetre? Or do you always need to be that accurate?
🗪
2:05:25danzaidan Q: Would separating chunks into chunks in this case be overkill?
🗪
2:05:25danzaidan Q: Would separating chunks into chunks in this case be overkill?
🗪
2:05:25danzaidan Q: Would separating chunks into chunks in this case be overkill?
🗪
2:07:11LongBoolean Q: In this hypothetical situation, I suppose you could also change the physics / realism of the universe so that planets and galaxies are closer than they would normally be so flying to them is more feasible
🗪
2:07:11LongBoolean Q: In this hypothetical situation, I suppose you could also change the physics / realism of the universe so that planets and galaxies are closer than they would normally be so flying to them is more feasible
🗪
2:07:11LongBoolean Q: In this hypothetical situation, I suppose you could also change the physics / realism of the universe so that planets and galaxies are closer than they would normally be so flying to them is more feasible
🗪
2:08:41danzaidan Q: Do you have to always take float precision into account or is it more like an "it will come up" type of thing (like the rock that didn't move on The Witness editor)?
🗪
2:08:41danzaidan Q: Do you have to always take float precision into account or is it more like an "it will come up" type of thing (like the rock that didn't move on The Witness editor)?
🗪
2:08:41danzaidan Q: Do you have to always take float precision into account or is it more like an "it will come up" type of thing (like the rock that didn't move on The Witness editor)?
🗪
2:09:11stefdevs Q: Does the rather nice state of the anti-aliasing in Handmade Hero have to do with the use of depth peeling or is it just standard MSAA?
🗪
2:09:11stefdevs Q: Does the rather nice state of the anti-aliasing in Handmade Hero have to do with the use of depth peeling or is it just standard MSAA?
🗪
2:09:11stefdevs Q: Does the rather nice state of the anti-aliasing in Handmade Hero have to do with the use of depth peeling or is it just standard MSAA?
🗪
2:09:44mr_jake_from_statefarm Q: How do you tackle this issue in a large open world then? Do you use some sort of grid system?
🗪
2:09:44mr_jake_from_statefarm Q: How do you tackle this issue in a large open world then? Do you use some sort of grid system?
🗪
2:09:44mr_jake_from_statefarm Q: How do you tackle this issue in a large open world then? Do you use some sort of grid system?
🗪
2:12:12stefdevs Q: Follow-up: What benefit does depth peeling bring to the anti-aliasing table? (Not that you're doing depth peeling for that purpose, obviously)
🗪
2:12:12stefdevs Q: Follow-up: What benefit does depth peeling bring to the anti-aliasing table? (Not that you're doing depth peeling for that purpose, obviously)
🗪
2:12:12stefdevs Q: Follow-up: What benefit does depth peeling bring to the anti-aliasing table? (Not that you're doing depth peeling for that purpose, obviously)
🗪
2:13:46Close it up, with a glimpse into the future of working on the camera motion and introducing the new art
🗩
2:13:46Close it up, with a glimpse into the future of working on the camera motion and introducing the new art
🗩
2:13:46Close it up, with a glimpse into the future of working on the camera motion and introducing the new art
🗩