Optimization best practices for CMI
Hello fellow creators! I'll start by saying that I absolutely love 3D modeling and CMI (so much so that I'm currently back in school for it). So, I don't just want to make pretty things, I want visitors of my worlds to have great experiences when they enter them, especially first impressions. With that said, I have done my own research during my build and spoken to some amazing creators on the platform, but I would love to hear from all the CMI creators/3D modelers on here, especially if you build your own assets, what are your best suggestions/tips, and best practices for optimizing your builds/assets for VR/Horizon Worlds? Such as, what is your go to amount of polygons(faces) or vertices? I know HZW allows a big amount of verts, but from your experiences creating in VR, what is your recommended amount of verts or polys/faces per asset and world? What are the best ways to ensure less draw calls and high FPS? Maybe, what are some things us modelers should def avoid? Any and all advise to help us optimize the best way possible, would be amazing! (I have to tag SpaceGlitterUnicorn on this cause IYKYK lol) -Kayrrie377Views13likes3CommentsWant to participate in this week's challenge?
Whether you're new to horizon or an expert creator, check out this week's challenges New Creator: Weekly Creator Challenge #2 - Meta Community Forums - 1299605 Experienced Creator: Weekly Creator Challenge #2 - Meta Community Forums - 1299606 Win some badges!321Views11likes0CommentsTip: Asset Variables and Arrays
There are two ways you can get a reference of an asset. The first is by adding a variable in the propsDefinition like this. static propsDefinition = { pageOneImage: { type: hz.PropTypes.Asset, default: null }, }; The other way is a bit easier as you do not have to worry about setting it in the properties panel and that looks like this. wheatImage: hz.Asset = new hz.Asset(BigInt('1801892640628366')) That large number is the assets ID, and it can be found by navigating to the asset through the My Asset folder under the Asset Library. Click on your asset and click on the copy icon to copy the id to your clipboard for easy pasting and not having to worry about typing in the correct number. See Below. For arrays, we cannot make an array visible in the properties panel. So, you will either have to add each one individually to the propsDefinition and then push them all to a private array at start like so. static propsDefinition = { pageOneImage: { type: hz.PropTypes.Asset, default: null }, pageTwoImage: { type: hz.PropTypes.Asset, default: null }, pageThreeImage: { type: hz.PropTypes.Asset, default: null }, pageFourImage: { type: hz.PropTypes.Asset, default: null }, pageFiveImage: { type: hz.PropTypes.Asset, default: null }, pageSixImage: { type: hz.PropTypes.Asset, default: null }, pageSevenImage: { type: hz.PropTypes.Asset, default: null }, pageCoverImage: { type: hz.PropTypes.Asset, default: null }, }; private assetArray: hz.TextureAsset[] = [] start() { if (this.props.pageCoverImage) this.assetArray.push(this.props.pageCoverImage); if (this.props.pageOneImage) this.assetArray.push(this.props.pageOneImage); if (this.props.pageTwoImage) this.assetArray.push(this.props.pageTwoImage); if (this.props.pageThreeImage) this.assetArray.push(this.props.pageThreeImage); if (this.props.pageFourImage) this.assetArray.push(this.props.pageFourImage); if (this.props.pageFiveImage) this.assetArray.push(this.props.pageFiveImage); if (this.props.pageSixImage) this.assetArray.push(this.props.pageSixImage); if (this.props.pageSevenImage) this.assetArray.push(this.props.pageSevenImage); } Alternatively, you can just create an array of assets using their ids like this. private assetArray: hz.Asset[] = [new hz.Asset(BigInt(1801892640628366)), new hz.Asset(BigInt(498314826561242)), new hz.Asset(BigInt(1233397157754641)), new hz.Asset(BigInt(490691784022329))] I personally prefer to make a map when doing this. A map is a key/value pair commonly called a dictionary in other languages. But it really depends on your use case. That would look something like this. private assetMap: Map<hz.Asset, number> = new Map([ [new hz.Asset(BigInt(1801892640628366)), 1], [new hz.Asset(BigInt(498314826561242)), 1], [new hz.Asset(BigInt(1233397157754641)), 1], [new hz.Asset(BigInt(490691784022329)), 1]]) NOTE: You cannot get the ID of the assets in the Public Assets folder. NOTE: Those IDs are legit and are just images I use for the HUD in Harvest to Hearth.257Views3likes0Commentsclothing guardrails are inaccurate
in the clothing creation I am getting blocked from uploading my own texture file that I created, saying it goes against the rules. It is very kid friendly and no ip or anything. Meanwhile, the AI generator gave me something that looked like it said “bit**” on it. is there an approval process we could submit textures to bypass the system?Solved228Views2likes6Comments[TIP] Use 2-Sided Planes over the 10x10 Plane when possible
Hey all, I just wanted to share a tip after inadvertently discovering that I've been using the wrong type of plane for one of my projects, which has been causing my world vertex count to be higher than I expected. Here's a screenshot of what the 2-sided plane vs the 10x10 plane looks like in wireframe mode. Use the 2 sided plane to keep that World Vertex Count down!53Views2likes1CommentPublishing error: You are attempting to publish a world with pre-release features.
Hi, I have a World and I want to participate in the Creator Competition: Elevate Your Mobile World. When I try to use new features—such as importing an FBX file or inserting assets with the new format—there is no problem in previewing the World. However, since my World was originally created in 2022, I receive the following error message when attempting to publish: "You are attempting to publish a world with pre-release features." It seems that new features are recognized as pre-release features in worlds with older original metadata or internal structure. Even if I delete all entities and scripts in the World except for the imported FBX or inserted asset, I still receive the same error when I try to publish it. On the other hand, if I create a brand-new World and import the same FBX file or insert the same asset, publishing works fine. Additionally, in my older World, I can't assign custom textures to shapes, and the Build > Shapes menu lacks newer items like Cube Beveled or 10 x 10 Plane. Since the competition requires updating a previously published World, what would you suggest? Can I recreate and update my World from scratch to avoid the publishing error? If I do that, the new World would not meet the requirement of being originally published before June 30, 2025. Any guidance would be greatly appreciated. Thank you in advance!Solved548Views2likes15CommentsHow to Use unity_asset_bundles API in Horizon Worlds?
Hi there , I'm trying to import a Unity asset bundle into Horizon Worlds and use ssetBundleInstanceReference.setAnimationParameterBool() to play animations on a model. However, I haven’t been able to find any tutorials or examples showing how to do this. Could someone please help or point me in the right direction? Here’s the official API documentation I’m referring to: https://developers.meta.com/horizon-worlds/reference/2.0.0/unity_asset_bundles_assetbundleinstancereference Thanks in advance!796Views2likes2Comments