Can't see the material I applied to a cube

Hello,
I created a cube, stretched it out to make a poster and applied a material to it. It works fine for my avatar and I can see it. However, when I come in as someone else, I can’t see the material…it is just a blank box. I’m just starting out with HF and this might have been answered before, but I couldn’t find it.

Does anyone know how I can make the material I applied to an object visible to everyone that visits the sim?

Thanks!
Marie
(amvans)

Hello,
I was wondering if anyone can help me with this? I am trying to create a space where my distributed team can meet but if I can’t find a way to apply textures that are visible by everyone who comes in, it doesn’t make sense to use it.

Thanks,
Marie
(amvans)

Hey Marie,

Could I get some more details? Are you using a cube entity and a material entity? Are you editing them via Create or scripting? Or are you importing a model with textures on it?

Hi Sam,
I created a cube entity and a material entity. I copied the UUID from the cube entity and put it into the material entity’s parent UUID field. I can see the texture when I go in as myself. However, the texture is not showing up when I go into the sim as another avatar.

Does that help?

Thanks!
Marie

I am just using the inworld tools…I did not import anything.

In Create when you select the material entity, you should see a field for the “priority”. Is it set to something greater than 0?

Yes…it is set to 1.

Marie

Can you export the cube and the material entity (select both of them in Create, and press “Export Selection” in the Entity List) and send me the JSON? I can investigate more.

I can’t upload the JSON to this forum because it just wants jpegs or pngs. So here is the text:

{
“DataVersion”: 0,
“Entities”: [
{
“id”: “{2261df35-5eab-4de8-a4ba-788e2683b50a}”,
“type”: “Material”,
“lastEdited”: 1560800504763724,
“parentID”: “{b43550e9-ae63-4380-9f13-87ece3bb569e}”,
“name”: “NewMaterialPoster”,
“position”: {
“x”: -0.19672787189483643,
“y”: -1.4242229461669922,
“z”: -1.855677604675293
},
“rotation”: {
“x”: -0.0000152587890625,
“y”: -0.0000152587890625,
“z”: -0.0000152587890625,
“w”: 1
},
“created”: 1560800175984620,
“lastEditedBy”: “{83ea54ce-9c46-4148-9e68-d3dd62c5c54f}”,
“queryAACube”: {
“x”: -3.95304012298584,
“y”: -14.069645881652832,
“z”: -109.28253936767578,
“scale”: 61.528564453125
},
“grab”: {
“equippableLeftRotation”: {
“x”: -0.0000152587890625,
“y”: -0.0000152587890625,
“z”: -0.0000152587890625,
“w”: 1
},
“equippableRightRotation”: {
“x”: -0.0000152587890625,
“y”: -0.0000152587890625,
“z”: -0.0000152587890625,
“w”: 1
}
},
“damping”: 0,
“angularDamping”: 0,
“materialURL”: “C:\Users\mariev\Documents\High Fidelity Projects\AIECL_Share.hfm.json”,
“priority”: 1,
“clientOnly”: false,
“avatarEntity”: false,
“localEntity”: false,
“faceCamera”: false,
“isFacingAvatar”: false
},
{
“id”: “{b43550e9-ae63-4380-9f13-87ece3bb569e}”,
“type”: “Box”,
“lastEdited”: 1560800489353916,
“name”: “New AIECL Poster”,
“dimensions”: {
“x”: 10.602622032165527,
“y”: 5.25053596496582,
“z”: 0.16546642780303955
},
“rotation”: {
“x”: -0.0000152587890625,
“y”: -0.0000152587890625,
“z”: -0.0000152587890625,
“w”: 1
},
“created”: 1560799836230134,
“lastEditedBy”: “{83ea54ce-9c46-4148-9e68-d3dd62c5c54f}”,
“queryAACube”: {
“x”: -5.916314125061035,
“y”: -5.916314125061035,
“z”: -5.916314125061035,
“scale”: 11.83262825012207
},
“grab”: {
“equippableLeftRotation”: {
“x”: -0.0000152587890625,
“y”: -0.0000152587890625,
“z”: -0.0000152587890625,
“w”: 1
},
“equippableRightRotation”: {
“x”: -0.0000152587890625,
“y”: -0.0000152587890625,
“z”: -0.0000152587890625,
“w”: 1
}
},
“damping”: 0,
“angularDamping”: 0,
“collisionMask”: 23,
“collidesWith”: “static,dynamic,kinematic,otherAvatar,”,
“shape”: “Cube”,
“clientOnly”: false,
“avatarEntity”: false,
“localEntity”: false,
“faceCamera”: false,
“isFacingAvatar”: false
}
],
“Id”: “{04d46c85-004c-4a61-8677-cfed10b4547d}”,
“Version”: 120

Also, I use the same file for all three maps in the JSON file I’m using for the material:

{
“materialVersion”: 1,
“materials”: [
{
“name”: “AIECL_Sharepoint”,
“model”: “hifi_pbr”,
“albedo”: [ 1, 1, 1 ],
“albedoMap”: “C:/Users/mariev/Documents/High Fidelity Projects/AIECL.PNG”,
“roughnessMap”: “C:/Users/mariev/Documents/High Fidelity Projects/AIECL.PNG”,
“normalMap”: “C:/Users/mariev/Documents/High Fidelity Projects/AIECL.PNG”
}
]
}

Ah, ok. Your materialURL and the maps in the material are all referencing local files. Other observers don’t have any way to get these files. So it will work for you locally because the files are on your machine, but not for anyone else.

You’ll need to host the image(s) and the material JSON somewhere so that others can access them.

Just to clarify, even if the local files are on the server that is running the HF instance that we want to use for the meeting, it won’t show up? If we are trying to keep everything behind the firewall, how do we host the images so that everyone who is present can see them but no one else?

I apologize for bugging you again, but I’m new to HF and I’m coming from an OpenSim background, so some of this is not intuitive for me.

Thanks,
Marie

Yeah, when each observer sees the material entity, they’ll see it with materialURL “C:\Users\mariev\Documents\High Fidelity Projects\AIECL_Share.hfm.json” and they won’t know how to resolve that path.

One solution is to use the Asset Server, which does exactly what you’re looking for: host some files on your domain such that only people in the domain can access them. You can read about it in the docs: https://docs.highfidelity.com/en/rc82/host/manage-assets.html

Thanks so much! That finally worked.

1 Like

Sorry to bug you again, but the solution isn’t working for everyone yet. The question I have is do I need to do something in the settings so that people who come in can see all the textures I have put into the Asset server? For example, I had to add the IP addresses of people allowed to access the space in the “settings” that are available through the icon in the system tray (sends you to a browser).

Also, do I need to put both the textures and the JSON file in the asset server? The documentation isn’t clear on that point.

Thanks!

Marie

Hmmmmm…I want to say that you just need to put the JSON on the asset server and it’ll automatically download and handle the textures…but I’m not completely sure. The important thing is that the materialURL and the textures have to be accessible to all machines, and that if you put anything on the asset server, all of the relevant links to that thing are updated.

You could also maybe bake the textures by themselves, and then use something like Gist to really easily host your material JSON description (which would point to the ATP links to the textures). Then your materialURL will just be the raw Gist link.