{"$schema": "https://raw.githubusercontent.com/guitaripod/wwdc-sessions/master/schema/transcript.schema.json", "id": "wwdc2026-280", "language": "eng", "source": "https://developer.apple.com/videos/play/wwdc2026/280", "wordCount": 2013, "segments": [{"start": 7.0, "text": "Hi everyone!"}, {"start": 8.0, "text": "I'm JP, an engineer on Reality Composer Pro here at Apple."}, {"start": 11.0, "text": "In this session I want to talk about how you can iterate on your spatial content"}, {"start": 16.0, "text": "faster than ever using Reality Composer Pro 3."}, {"start": 20.0, "text": "Since the launch of Apple Vision Pro, we have seen remarkable spatial experiences"}, {"start": 25.0, "text": "brought to the platform."}, {"start": 26.0, "text": "Reality Composer Pro has been at the center of bringing that amazing content to visionOS,"}, {"start": 32.0, "text": "and it's inspiring to see what this community has been building."}, {"start": 35.0, "text": "Our goal is to continue to give you more and better tools"}, {"start": 39.0, "text": "to bring your ideas to life with as little friction as possible."}, {"start": 44.0, "text": "With that in mind, we are introducing some brand new capabilities that will help you"}, {"start": 48.0, "text": "realize even your most ambitious spatial projects!"}, {"start": 53.0, "text": "Reality Composer Pro 3 is built from the ground up for fast, iterative"}, {"start": 57.0, "text": "and collaborative workflows."}, {"start": 59.0, "text": "It helps you get further along in your development without the need to touch Xcode."}, {"start": 65.0, "text": "In this session, I'll take you through some of these brand-new capabilities,"}, {"start": 70.0, "text": "like Live preview, Lightmaps, and the Reality Composer Pro Assistant,"}, {"start": 74.0, "text": "which can generate 3D content using AI."}, {"start": 77.0, "text": "I'll show you the process of adding a few small features to the interactive game"}, {"start": 82.0, "text": "Chaparral Village."}, {"start": 84.0, "text": "I'll start with a quick overview of the editor core functionalities."}, {"start": 88.0, "text": "I'll cover how to use entities and components to build up a scene."}, {"start": 92.0, "text": "I'll introduce the new prototype and instancing system, designed to help you"}, {"start": 97.0, "text": "efficiently organize, reuse and manage your assets."}, {"start": 102.0, "text": "I'll demonstrate how you can preview and even author"}, {"start": 105.0, "text": "your content directly on the Vision Pro."}, {"start": 108.0, "text": "I'll use Lightmaps to bake the indirect lighting of my scene."}, {"start": 112.0, "text": "And finally, I'll introduce you to the Reality Composer Pro Assistant,"}, {"start": 117.0, "text": "and how you can leverage it to add content to your world."}, {"start": 120.0, "text": "First things first."}, {"start": 122.0, "text": "Reality Composer Pro 3 is no longer available as an Xcode developer tool."}, {"start": 127.0, "text": "You can now download it from developer.apple.com"}, {"start": 130.0, "text": "and simply launch it straight from your Applications folder."}, {"start": 134.0, "text": "If you would like to familiarize yourself with the basics of using"}, {"start": 136.0, "text": "the Reality Composer Pro Editor,"}, {"start": 139.0, "text": "I would recommend checking out the session"}, {"start": 141.0, "text": "\"Meet Reality Composer Pro\" from WWDC23."}, {"start": 145.0, "text": "Let's start with a quick overview of the project I'll work on today."}, {"start": 149.0, "text": "This is the Alchemy Area from the Chaparral Village."}, {"start": 153.0, "text": "All objects in this scene were modeled in Blender,"}, {"start": 156.0, "text": "imported as USD files, and then laid out in Reality Composer Pro."}, {"start": 161.0, "text": "To get a better look, I'll use the Focus Mode from the View menu"}, {"start": 164.0, "text": "and explore the scene a bit."}, {"start": 173.0, "text": "This is a gorgeous scene."}, {"start": 176.0, "text": "I'll start by adding an asset to my project."}, {"start": 178.0, "text": "To do so, I'll use the import asset icon available in the Project Browser"}, {"start": 183.0, "text": "and select the Cauldron USD file I have on my desktop."}, {"start": 194.0, "text": "When a USD file is imported, its content gets organized"}, {"start": 198.0, "text": "and optimized into an import bundle."}, {"start": 201.0, "text": "Once imported, I can expand the bundle to inspect it."}, {"start": 209.0, "text": "Within the bundle, I see the imported geometry, materials, textures, and more."}, {"start": 215.0, "text": "The cauldron asset looks good."}, {"start": 217.0, "text": "Now, to bring it into the lab, I'll just drag and drop the bundle into the viewport."}, {"start": 227.0, "text": "This added asset is shown in the hierarchy view and it's called an entity."}, {"start": 232.0, "text": "It has a Transform Component that's shown in the inspector panel on the right."}, {"start": 237.0, "text": "Entities and components are the core building blocks of everything you create"}, {"start": 241.0, "text": "in Reality Composer Pro 3."}, {"start": 244.0, "text": "Let's go through them in more detail."}, {"start": 246.0, "text": "In the hierarchy panel I can see a list of all the entities that make up my scene,"}, {"start": 251.0, "text": "and they can be re-ordered and nested as needed."}, {"start": 254.0, "text": "I'll expand the fireplace"}, {"start": 257.0, "text": "and drag the cauldron underneath it."}, {"start": 265.0, "text": "I'll select the cauldron entity and position it at the right spot and angle"}, {"start": 269.0, "text": "by adjusting the values within the Transform Component."}, {"start": 280.0, "text": "I can choose to add more components to an entity using the Add Component button."}, {"start": 287.0, "text": "You can add lights, physics, audio, and a lot more to your entity using this panel."}, {"start": 296.0, "text": "I'll use a couple of these components"}, {"start": 298.0, "text": "to create an interesting visual effect for my scene."}, {"start": 302.0, "text": "First, I'll create a child under the Table entity."}, {"start": 305.0, "text": "I will use the context menu and choose 'Add Child Entity'."}, {"start": 309.0, "text": "I will call it 'Magic Effect'."}, {"start": 314.0, "text": "To frame an entity, you can always press 'f'."}, {"start": 320.0, "text": "To the Magic Effect entity, I'll add another child called 'Glow'."}, {"start": 332.0, "text": "and I'll add a simple Point Light component."}, {"start": 340.0, "text": "I'll adjust the position of the light"}, {"start": 348.0, "text": "and tweak its attenuation,"}, {"start": 356.0, "text": "adjust the color,"}, {"start": 371.0, "text": "and adjust the intensity."}, {"start": 378.0, "text": "I'll also add the new Compute Simulation component to the Magic Effect."}, {"start": 393.0, "text": "In the inspector panel, I'll choose the Magic Graph that I created for my project."}, {"start": 398.0, "text": "I can do that using the Compute Graph picker."}, {"start": 401.0, "text": "Notice that it shows all available compute graphs in this project."}, {"start": 405.0, "text": "I have a Magic Graph and a Brewing Graph available."}, {"start": 408.0, "text": "I'll use the Magic Graph for now, and keep the Brewing Graph for later."}, {"start": 413.0, "text": "Compute Graph makes GPU programming accessible to anyone."}, {"start": 417.0, "text": "Its node-based graphs lets you build anything, from simple particle systems"}, {"start": 422.0, "text": "to complex fluid simulations."}, {"start": 424.0, "text": "For a deeper dive on this topic, watch the session"}, {"start": 427.0, "text": "\"Supercharge your spatial workflows with Reality Composer Pro 3\"."}, {"start": 432.0, "text": "You'll notice that the Compute Graph isn't visible right now."}, {"start": 436.0, "text": "That's because this graph only runs during the simulation stage."}, {"start": 440.0, "text": "To test it, I'll use the launch control and run my game"}, {"start": 443.0, "text": "by pressing the Play button."}, {"start": 445.0, "text": "This is where Reality Composer Pro 3 really starts to shine."}, {"start": 453.0, "text": "The Alchemy Area is now running and I can see the Compute Graph being simulated."}, {"start": 458.0, "text": "Let me get a closer look."}, {"start": 465.0, "text": "I'll dock the simulation tab next to the scene tab."}, {"start": 472.0, "text": "This allows me to keep authoring my content even as the game is running."}, {"start": 477.0, "text": "I'll place this Magic Effect into the bowl on the table"}, {"start": 493.0, "text": "and tweak the graph's twist amount to my liking."}, {"start": 503.0, "text": "The simulation tab allows me to make tweaks rapidly"}, {"start": 506.0, "text": "without any deployment process getting in the way."}, {"start": 510.0, "text": "From physics simulation to script graphs, to animations, everything you author"}, {"start": 515.0, "text": "in Reality Composer Pro can be previewed in real time in the simulation tab,"}, {"start": 520.0, "text": "greatly reducing the friction between you and the final experience."}, {"start": 524.0, "text": "Next, I'll cover a new addition to Reality Composer Pro called 'prototypes',"}, {"start": 529.0, "text": "which can be used to create powerful and reusable objects."}, {"start": 533.0, "text": "To turn an entity into a prototype, you can drag it from the hierarchy tab"}, {"start": 537.0, "text": "directly into the Project Browser."}, {"start": 545.0, "text": "This creates a new prototype asset."}, {"start": 548.0, "text": "I can then instantiate this new prototype by dragging it into the viewport."}, {"start": 559.0, "text": "I'll rename this new instance 'Brewing Effect'."}, {"start": 569.0, "text": "Notice that now I have two instances using the Magic Effect prototype."}, {"start": 573.0, "text": "I can provide overrides to these instances, allowing me to customize them."}, {"start": 578.0, "text": "First, I'll change the effect of the brewing instance"}, {"start": 581.0, "text": "to the Brewing Graph I mentioned earlier..."}, {"start": 590.0, "text": "and adjust the color,"}, {"start": 605.0, "text": "attenuation,"}, {"start": 612.0, "text": "and falloff of the Glow entity."}, {"start": 619.0, "text": "Uh oh... that looks bad."}, {"start": 621.0, "text": "I can always reset an override back to its source value"}, {"start": 625.0, "text": "by choosing Reset in the context menu."}, {"start": 628.0, "text": "I'll right click on the Attenuation Falloff property and reset it."}, {"start": 637.0, "text": "Ok, that's much better."}, {"start": 639.0, "text": "I'll keep the original falloff value."}, {"start": 641.0, "text": "With prototypes, you edit your content in one place and the system handles the rest."}, {"start": 647.0, "text": "You can instantiate a prototype multiple times"}, {"start": 650.0, "text": "and override any of those instances individually."}, {"start": 654.0, "text": "If you don't like those overrides,"}, {"start": 656.0, "text": "you can reset them to their original values"}, {"start": 659.0, "text": "or you can even propagate the overrides back to the source."}, {"start": 662.0, "text": "Nothing is ever permanently changed unless you want it to be."}, {"start": 666.0, "text": "Next, I will show you another cool new feature in Reality Composer Pro called Live Preview."}, {"start": 672.0, "text": "Since we're building this experience for the Vision Pro,"}, {"start": 674.0, "text": "I can target a simulation to be played on any Vision Pro device"}, {"start": 678.0, "text": "currently connected to my Mac."}, {"start": 680.0, "text": "I'll use the launch control panel to start a Live Preview session"}, {"start": 683.0, "text": "which will ship later this year."}, {"start": 685.0, "text": "This will open the companion app on visionOS."}, {"start": 688.0, "text": "Now I can continue to author in Reality Composer Pro"}, {"start": 691.0, "text": "and see the updates reflected instantly."}, {"start": 694.0, "text": "Notice how the blue fill light has the new physical space lighting feature enabled."}, {"start": 699.0, "text": "Authoring an effect like this on device allows me to get an instant feel"}, {"start": 703.0, "text": "of its impact in a spatial experience."}, {"start": 706.0, "text": "This way of live previewing dramatically cuts down on iteration times."}, {"start": 711.0, "text": "It removes any guesswork from the process of authoring."}, {"start": 714.0, "text": "What you see is truly what you get."}, {"start": 717.0, "text": "This is coming along nicely but after these lighting edits, I'm noticing that"}, {"start": 721.0, "text": "the scene no longer feels quite right."}, {"start": 723.0, "text": "This is because the indirect lighting previously generated for this scene"}, {"start": 727.0, "text": "no longer matches the new lighting."}, {"start": 730.0, "text": "To fix this, I'll use the new Lightmaps in Reality Composer Pro."}, {"start": 735.0, "text": "Indirect lighting captures the way light bounces around a scene and contributes to"}, {"start": 739.0, "text": "areas not directly visible by any single light."}, {"start": 743.0, "text": "The space underneath this table for instance has no direct lighting to it"}, {"start": 747.0, "text": "but by simulating indirect lighting, we can capture the subtle light that still"}, {"start": 751.0, "text": "reaches that area, however faint it may be."}, {"start": 755.0, "text": "For example, in my scene,"}, {"start": 756.0, "text": "most of the Alchemy Area isn't directly lit by the fireplace."}, {"start": 761.0, "text": "But Lightmaps helps fill in those darker areas with soft bounced light,"}, {"start": 765.0, "text": "greatly improving the overall look of the scene."}, {"start": 769.0, "text": "Simulating indirect lighting can be costly"}, {"start": 771.0, "text": "but as the lights in the Alchemy Area don't move, I can use the new"}, {"start": 775.0, "text": "lightmapping component to pre-calculate the indirect lighting term"}, {"start": 778.0, "text": "and save the results to a texture called a Lightmap."}, {"start": 782.0, "text": "The Alchemy Area entity has a Lightmap component attached to it."}, {"start": 791.0, "text": "Here I can control what lighting term gets baked and fine-tune quality settings."}, {"start": 796.0, "text": "I'll change the quality of the Lightmaps under Bake Settings from low to high."}, {"start": 805.0, "text": "To preview the output of the baked lights, I'll open the Lightmap Preview tab."}, {"start": 810.0, "text": "I can do this from the Tab menu."}, {"start": 822.0, "text": "This allows me to see in real time how much the indirect lighting impacts the scene."}, {"start": 827.0, "text": "I'll tweak the Lightmap settings."}, {"start": 835.0, "text": "The preview tab lets me get a clear picture of the final result"}, {"start": 838.0, "text": "before committing to a full bake."}, {"start": 841.0, "text": "I'm pretty happy with those settings,"}, {"start": 843.0, "text": "and I'm ready to regenerate the scene's Lightmap."}, {"start": 847.0, "text": "While my lights are getting baked, let me go through the different lighting terms"}, {"start": 851.0, "text": "that the Lightmap component supports."}, {"start": 854.0, "text": "In addition to the Indirect Lighting, Reality Composer Pro can also generate"}, {"start": 858.0, "text": "Ambient Occlusion and Beauty Lightmaps."}, {"start": 861.0, "text": "Ambient Occlusion represents"}, {"start": 863.0, "text": "the visibility of each point in a scene to its surroundings."}, {"start": 867.0, "text": "And Beauty represents the final color of each point in a scene"}, {"start": 870.0, "text": "taking into account both indirect and direct lighting."}, {"start": 874.0, "text": "Let me go check on my Lightmaps."}, {"start": 877.0, "text": "And it's done!"}, {"start": 879.0, "text": "My Lightmaps are completely baked and my scene looks beautiful."}, {"start": 883.0, "text": "Before I wrap up, I'd like to add one more thing to this scene."}, {"start": 887.0, "text": "I was thinking it would look great if we had a few more items on the work bench."}, {"start": 892.0, "text": "For this I'll use the all new Reality Composer Pro Assistant."}, {"start": 897.0, "text": "The new AI Assistant is always available from the right panel."}, {"start": 903.0, "text": "From there I can simply prompt the assistant for help."}, {"start": 927.0, "text": "That looks great."}, {"start": 928.0, "text": "Let's also add a few candles."}, {"start": 940.0, "text": "And my scene is looking complete."}, {"start": 942.0, "text": "The Reality Composer Pro Assistant uses powerful generative models"}, {"start": 946.0, "text": "to craft 3D objects and materials on demand,"}, {"start": 949.0, "text": "letting you iterate faster, experiment freely,"}, {"start": 953.0, "text": "and turn ideas into reality with ease."}, {"start": 955.0, "text": "It is also ready to answer"}, {"start": 957.0, "text": "any Reality Composer Pro questions you might have!"}, {"start": 960.0, "text": "I've covered a lot of ground today, and it only scratches the surface of what"}, {"start": 964.0, "text": "Reality Composer Pro 3 has to offer."}, {"start": 967.0, "text": "To continue your journey with Reality Composer Pro,"}, {"start": 970.0, "text": "first, download it from"}, {"start": 971.0, "text": "developer.apple.com."}, {"start": 974.0, "text": "While you're there, be sure to explore the available sample projects."}, {"start": 978.0, "text": "There is a lot more in Reality Composer Pro"}, {"start": 980.0, "text": "that I wasn't able to cover in this session."}, {"start": 982.0, "text": "To learn more, I recommend that you check out the Reality Composer Pro sessions."}, {"start": 987.0, "text": "I speak on behalf of the whole team when I say we cannot wait to see"}, {"start": 992.0, "text": "what you will create with it."}, {"start": 994.0, "text": "Thanks for watching!"}]}