Read this for a complete list of changes.
(This is relevant only to users who have access to the C# source code in the private TDWBase repo.)
To create a Linux build, delete all Flex shaders located in TDWBase/Assets/NVIDIA/Flex/Resources/Shaders
that have DrawParticles
or Fluid
in their name. Otherwise, the Editor will crash to desktop. This is handled automatically when we build and upload TDW releases to GitHub.
Update: Fixed as of March 7, 2021, having upgraded to Unity 2020.2.7
It's currently not possible to draw Flex particles ("draw_particles"
in the Command API) in Linux. Attempting to create a build with the Flex particle shaders for Linux results in a crash-to-desktop. This is new as of Unity 2020.2.2 and it is likely that a future Unity Engine upgrade (i.e. to Unity 2020.2.x) will fix it. As a matter of course, we apply minor Unity Engine updates to TDW whenever they're available. Should one of these updates fix this particular issue, we'll note it in the changelog.
Update: This has probably been fixed (see update note from March 7 in the above section). However, we don't have Ubuntu 16 test machines and haven't been able to test Flex on Linux.
We updated the asset bundles of some streamed scenes to make them compatible with Unity 2020.2; we didn't introduce any changes that would affect the scenes at runtime.
tdw_room_2018
has been renamed tdw_room
and archviz_house_2018
been renamed archviz_house
. If your controller references either scene, you need to change the scene name accordingly.
There was a persistent bug in TDW that caused certain models and materials to not cast shadows or reflect light correctly. This has been fixed.
We strongly recommend using the rendering as-is because rendering is superior to previous versions of TDW without affecting performance. If your project was made in a pre-v1.8 version of TDW and it's absolutely required that the rendering stay the same, you can send this command:
{"$type": "set_legacy_shaders", "value": True}
Additionally, the post-process vignette affect is now disabled by default. To re-enable it:
{"$type": "set_vingette", "enabled": True}
The fixes to the _depth
and _depth_simple
passes were introduced in the last few v1.7 releases, but they're worth mentioning here: the depth data is now far more accurate. It's also a different format. All other passes are .jpg or .png byte arrays. The _depth
and _depth_simple
passes are raw RGB numpy arrays because we found that encoding to png resulted in a loss of information. This means that depth images need to be encoded to png before being saved to disk. This is handled automatically by TDWUtils.save_images()
but if you've been saving images with your own code, you might need to review the code within TDWUtils.save_images()
to see how to save a depth image.
Additionally, we found that the _normals
pass was inaccurate for similar underlying reasons. This has been fixed as of TDW v1.8.0 (not v1.7). The _normals
pass is still encoded as a .png file, so you won't have to change any of your code to write it to disk.
(This is relevant only to users who have access to the C# source code in the private TDWBase repo.)
Creating a build in Unity Editor can take much more time than in previous versions of TDW. This is because Unity needs to compile a lot of missing shaders in order to fix long-standing graphics issues (see above). Creating a build can take 10-15 minutes. While we're still understanding this process, it seems that Unity Editor will cache some of the shader data, meaning that the next time you create a build, it will be much faster. Upgrading Unity Engine will likely clear this cache, as will "Reimport All".
By default, all Linux and OS X builds will have execute permissions correctly set. In order to preserve this, the builds are now stored as .tar.gz instead of .zip
Removed toggle_image_sensor
. You should use enable_image_sensor
instead.
If you've used the Asset Bundle Creator in TDW v1.7 or prior, delete the directory. The next time you use the Asset Bundle Creator, it will recreate the directory and Unity project.
The Sticky Mitten Avatar has been deprecated, meaning that we don't plan to continuously improve the Sticky Mitten Avatar unless a specific ongoing project needs support.
The Sticky Mitten Avatar has been replaced with the Magnebot which has a new high-level API. The Magnebot retains most of the same functionality as the Sticky Mitten Avatar but far less buggy. We strongly recommend any new projects that want to use TDW for quasi-robotics experiments to use the Magnebot, and we encourage anyone still using the Sticky Mitten Avatar to upgrade to the Magnebot if possible.
- The Magnebot uses Unity's new ArticulationBody component instead of the old HingeJoint component used by the Sticky Mitten Avatar. HingeJoints tend to stretch or glitch; ArticulationBodies don't have these problems.
- The Magnebot is a robot, not an avatar. It won't respond to avatar commands such as
turn_avatar_by
and it doesn't initialize with a camera. See this document for more information. - The Sticky Mitten Avatar responds to both physics and non-physics commands. The Magnebot responds only to certain physics commands.
- The Sticky Mitten Avatar moves around the scene by having forces continuously applied to it. The Magnebot has wheels (which in the API are just revolute joints without angle limits) that turn to move it forward.
- Magnebot has a somewhat difference shape and size than the Sticky Mitten Avatar.
- There are two variants of the Sticky Mitten Avatar: "A_StickyMitten_Adult" and "A_StickyMitten_Baby". There is only one Magnebot. However, the Magnebot can slide its torso up and down. You can constrain the height of the torso to be similar to either of the Sticky Mitten Avatars.
- The Sticky Mitten Avatar can pick up objects nearby a mitten (
pick_up_proximity
) or adjacent to a mitten (pick_up
). The Magnebot only picks up objects adjacent to the magnet. - When using a Sticky Mitten Avatar, the controller must continuously send
pick_up
orpick_up_proximity
until the output data indicates that the object has been picked up. When using a Magnebot, the controller needs to sendset_magnet_targets
, after which the Magnebot will pick up any of those targets on the frame that the magnet collides with them. - A Sticky Mitten Avatar picks up objects by attaching a breakable FixedJoint component. A Magnebot picks up objects by temporarily destroying the object's rigidbody and "fusing" it to the magnet. This means:
- The link between a magnet and the object is unbreakable (and will never glitch) until the object is dropped.
- Rigidbody commands such as
set_mass
can't be sent to objects held by a magnet. send_rigidbodies
will return default data for held objects.
Sticky Mitten Avatar | Magnebot |
---|---|
create_avatar |
add_magnebot |
teleport_avatar_to |
teleport_robot |
destroy_avatar |
destroy_robot |
Sticky Mitten Avatar | Magnebot |
---|---|
move_avatar_forward_by |
set_revolute_target Set target angles for the Magnebot's wheels. |
set_avatar_drag |
set_immovable |
set_avatar_rigidbody_constraints |
set_immovable |
turn_avatar_by |
set_revolute_target Set target angles for the Magnebot's wheels. |
Sticky Mitten Avatar | Magnebot |
---|---|
bend_arm_joint_by |
set_revolute_target set_spherical_target Add or subtract from the current angles. See: Robot.get_joint_angles() . |
bend_arm_joint_to |
set_revolute_target set_spherical_target |
pick_up |
set_magnet_targets |
put_down |
detach_from_magnet |
rotate_waist |
set_revolute_target Set a target angle for the Magnebot's column. Unlike the Sticky Mitten Avatar, this is a physics motion. |
stop_arm_joint |
set_revolute_target set_spherical_target Set the targets to the current angles. See: Robot.get_joint_angles() . |
Sticky Mitten Avatar | Magnebot |
---|---|
send_avatars |
send_robots send_magnebots |
send_avatar_segmentation_colors |
send_static_robots |
Sticky Mitten Avatar | Magnebot |
---|---|
adjust_joint_damper_by adjust_joint_force_by set_joint_damper set_joint_force |
set_robot_joint_drive Get the default joint drive parameters via send_static_robots . |
set_avatar_mass |
set_robot_joint_mass Set the mass of the root object. See: StaticRobot.get_is_root() . |
set_sticky_mitten_profile |
set_robot_joint_drive set_robot_joint_mass |
set_avatar_physic_material |
set_robot_joint_physic_material |
Command | Notes |
---|---|
parent_avatar_to_robot |
Read this. |
set_prismatic_target |
The torso of the Magnebot can slide up or down. |
Listed here are Sticky Mitten Avatar commands specific to the Sticky Mitten Avatar, as opposed to avatars in general.
All commands normally used for a kinematic avatar (such as image capture commands) are applicable to an avatar parented to a Magnebot via the command parent_avatar_to_robot
.
Command | Notes |
---|---|
adjust_joint_angular_drag_by set_joint_angular_drag |
ArticulationBody doesn't have an angular drag parameter. |
apply_force_to_avatar |
The Magnebot can't move laterally because it uses wheels to move. |
enable_avatar_transparency |
|
pick_up_proximity |
Magnets only "pick up" objects that they collide with. |
rotate_head_by |
The Magnebot doesn't have a head. However, the Magnebot API constrains the camera rotation in a similar manner to this command. |
set_avatar_collision_detection_mode |
ArticulationBody doesn't have a collision detection mode parameter. |
set_avatar_color |
|
set_stickiness |
Magnets don't have discrete "sides" that can individually be "magnetized". |