public override bool Equals(object obj) { if (!(obj is ovrAvatarMaterialLayerState)) { return(false); } ovrAvatarMaterialLayerState other = (ovrAvatarMaterialLayerState)obj; if (blendMode != other.blendMode) { return(false); } if (sampleMode != other.sampleMode) { return(false); } if (maskType != other.maskType) { return(false); } if (!VectorEquals(layerColor, other.layerColor)) { return(false); } if (!VectorEquals(sampleParameters, other.sampleParameters)) { return(false); } if (sampleTexture != other.sampleTexture) { return(false); } if (!VectorEquals(sampleScaleOffset, other.sampleScaleOffset)) { return(false); } if (!VectorEquals(maskParameters, other.maskParameters)) { return(false); } if (!VectorEquals(maskAxis, other.maskAxis)) { return(false); } return(true); }
public void UpdateAvatarMaterial(Material mat, ovrAvatarMaterialState matState) { mat.SetColor("_BaseColor", matState.baseColor); mat.SetInt("_BaseMaskType", (int)matState.baseMaskType); mat.SetVector("_BaseMaskParameters", matState.baseMaskParameters); mat.SetVector("_BaseMaskAxis", matState.baseMaskAxis); if (matState.alphaMaskTextureID != 0) { mat.SetTexture("_AlphaMask", GetLoadedTexture(matState.alphaMaskTextureID)); mat.SetTextureScale("_AlphaMask", new Vector2(matState.alphaMaskScaleOffset.x, matState.alphaMaskScaleOffset.y)); mat.SetTextureOffset("_AlphaMask", new Vector2(matState.alphaMaskScaleOffset.z, matState.alphaMaskScaleOffset.w)); } if (ClothingAlphaTexture != 0) { mat.EnableKeyword("VERTALPHA_ON"); mat.SetTexture("_AlphaMask2", GetLoadedTexture(ClothingAlphaTexture)); mat.SetTextureScale("_AlphaMask2", new Vector2(ClothingAlphaOffset.x, ClothingAlphaOffset.y)); mat.SetTextureOffset("_AlphaMask2", new Vector2(ClothingAlphaOffset.z, ClothingAlphaOffset.w)); } if (matState.normalMapTextureID != 0) { mat.EnableKeyword("NORMAL_MAP_ON"); mat.SetTexture("_NormalMap", GetLoadedTexture(matState.normalMapTextureID)); mat.SetTextureScale("_NormalMap", new Vector2(matState.normalMapScaleOffset.x, matState.normalMapScaleOffset.y)); mat.SetTextureOffset("_NormalMap", new Vector2(matState.normalMapScaleOffset.z, matState.normalMapScaleOffset.w)); } if (matState.parallaxMapTextureID != 0) { mat.SetTexture("_ParallaxMap", GetLoadedTexture(matState.parallaxMapTextureID)); mat.SetTextureScale("_ParallaxMap", new Vector2(matState.parallaxMapScaleOffset.x, matState.parallaxMapScaleOffset.y)); mat.SetTextureOffset("_ParallaxMap", new Vector2(matState.parallaxMapScaleOffset.z, matState.parallaxMapScaleOffset.w)); } if (matState.roughnessMapTextureID != 0) { mat.EnableKeyword("ROUGHNESS_ON"); mat.SetTexture("_RoughnessMap", GetLoadedTexture(matState.roughnessMapTextureID)); mat.SetTextureScale("_RoughnessMap", new Vector2(matState.roughnessMapScaleOffset.x, matState.roughnessMapScaleOffset.y)); mat.SetTextureOffset("_RoughnessMap", new Vector2(matState.roughnessMapScaleOffset.z, matState.roughnessMapScaleOffset.w)); } mat.EnableKeyword(LayerKeywords[matState.layerCount]); for (ulong layerIndex = 0; layerIndex < matState.layerCount; layerIndex++) { ovrAvatarMaterialLayerState layer = matState.layers[layerIndex]; mat.SetInt(LayerSampleModeParameters[layerIndex], (int)layer.sampleMode); mat.SetInt(LayerBlendModeParameters[layerIndex], (int)layer.blendMode); mat.SetInt(LayerMaskTypeParameters[layerIndex], (int)layer.maskType); mat.SetColor(LayerColorParameters[layerIndex], layer.layerColor); if (layer.sampleMode != ovrAvatarMaterialLayerSampleMode.Color) { string surfaceProperty = LayerSurfaceParameters[layerIndex]; mat.SetTexture(surfaceProperty, GetLoadedTexture(layer.sampleTexture)); mat.SetTextureScale(surfaceProperty, new Vector2(layer.sampleScaleOffset.x, layer.sampleScaleOffset.y)); mat.SetTextureOffset(surfaceProperty, new Vector2(layer.sampleScaleOffset.z, layer.sampleScaleOffset.w)); } if (layer.sampleMode == ovrAvatarMaterialLayerSampleMode.Parallax) { mat.EnableKeyword("PARALLAX_ON"); } mat.SetColor(LayerSampleParametersParameters[layerIndex], layer.sampleParameters); mat.SetColor(LayerMaskParametersParameters[layerIndex], layer.maskParameters); mat.SetColor(LayerMaskAxisParameters[layerIndex], layer.maskAxis); } materialStates[mat] = matState; }
protected void UpdateAvatarMaterial(Material mat, ovrAvatarMaterialState matState) { // Only update the material if it's a material we actively created ovrAvatarMaterialState cachedState; if (!materialStates.TryGetValue(mat, out cachedState)) { return; } if (cachedState.Equals(matState)) { return; } mat.SetColor("_BaseColor", matState.baseColor); mat.SetInt("_BaseMaskType", (int)matState.baseMaskType); mat.SetVector("_BaseMaskParameters", matState.baseMaskParameters); mat.SetVector("_BaseMaskAxis", matState.baseMaskAxis); if (matState.alphaMaskTextureID != 0) { mat.SetTexture("_AlphaMask", GetLoadedTexture(matState.alphaMaskTextureID)); mat.SetTextureScale("_AlphaMask", new Vector2(matState.alphaMaskScaleOffset.x, matState.alphaMaskScaleOffset.y)); mat.SetTextureOffset("_AlphaMask", new Vector2(matState.alphaMaskScaleOffset.z, matState.alphaMaskScaleOffset.w)); } if (matState.normalMapTextureID != 0) { mat.EnableKeyword("NORMAL_MAP_ON"); mat.SetTexture("_NormalMap", GetLoadedTexture(matState.normalMapTextureID)); mat.SetTextureScale("_NormalMap", new Vector2(matState.normalMapScaleOffset.x, matState.normalMapScaleOffset.y)); mat.SetTextureOffset("_NormalMap", new Vector2(matState.normalMapScaleOffset.z, matState.normalMapScaleOffset.w)); } if (matState.parallaxMapTextureID != 0) { mat.EnableKeyword("PARALLAX_ON"); mat.SetTexture("_ParallaxMap", GetLoadedTexture(matState.parallaxMapTextureID)); mat.SetTextureScale("_ParallaxMap", new Vector2(matState.parallaxMapScaleOffset.x, matState.parallaxMapScaleOffset.y)); mat.SetTextureOffset("_ParallaxMap", new Vector2(matState.parallaxMapScaleOffset.z, matState.parallaxMapScaleOffset.w)); } if (matState.parallaxMapTextureID != 0) { mat.EnableKeyword("ROUGHNESS_ON"); mat.SetTexture("_RoughnessMap", GetLoadedTexture(matState.roughnessMapTextureID)); mat.SetTextureScale("_RoughnessMap", new Vector2(matState.roughnessMapScaleOffset.x, matState.roughnessMapScaleOffset.y)); mat.SetTextureOffset("_RoughnessMap", new Vector2(matState.roughnessMapScaleOffset.z, matState.roughnessMapScaleOffset.w)); } mat.EnableKeyword(LayerKeywords[matState.layerCount]); for (ulong layerIndex = 0; layerIndex < matState.layerCount; layerIndex++) { ovrAvatarMaterialLayerState layer = matState.layers[layerIndex]; mat.SetInt(LayerSampleModeParameters[layerIndex], (int)layer.sampleMode); mat.SetInt(LayerBlendModeParameters[layerIndex], (int)layer.blendMode); mat.SetInt(LayerMaskTypeParameters[layerIndex], (int)layer.maskType); mat.SetColor(LayerColorParameters[layerIndex], layer.layerColor); if (layer.sampleMode != ovrAvatarMaterialLayerSampleMode.Color) { string surfaceProperty = LayerSurfaceParameters[layerIndex]; mat.SetTexture(surfaceProperty, GetLoadedTexture(layer.sampleTexture)); mat.SetTextureScale(surfaceProperty, new Vector2(layer.sampleScaleOffset.x, layer.sampleScaleOffset.y)); mat.SetTextureOffset(surfaceProperty, new Vector2(layer.sampleScaleOffset.z, layer.sampleScaleOffset.w)); } mat.SetColor(LayerSampleParametersParameters[layerIndex], layer.sampleParameters); mat.SetColor(LayerMaskParametersParameters[layerIndex], layer.maskParameters); mat.SetColor(LayerMaskAxisParameters[layerIndex], layer.maskAxis); } materialStates[mat] = matState; }
private void UpdateMaterial() { if (MeshInstance == null || MaterialID == 0) { return; } var mat = MeshInstance.material; var matState = MaterialState; mat.SetColor("_BaseColor", matState.baseColor); mat.SetInt("_BaseMaskType", (int)matState.baseMaskType); mat.SetVector("_BaseMaskParameters", matState.baseMaskParameters); mat.SetVector("_BaseMaskAxis", matState.baseMaskAxis); if (matState.alphaMaskTextureID != 0) { mat.SetTexture("_AlphaMask", OvrAvatarComponent.GetLoadedTexture(matState.alphaMaskTextureID)); mat.SetTextureScale("_AlphaMask", new Vector2(matState.alphaMaskScaleOffset.x, matState.alphaMaskScaleOffset.y)); mat.SetTextureOffset("_AlphaMask", new Vector2(matState.alphaMaskScaleOffset.z, matState.alphaMaskScaleOffset.w)); } if (matState.normalMapTextureID != 0) { mat.EnableKeyword("NORMAL_MAP_ON"); mat.SetTexture("_NormalMap", OvrAvatarComponent.GetLoadedTexture(matState.normalMapTextureID)); mat.SetTextureScale("_NormalMap", new Vector2(matState.normalMapScaleOffset.x, matState.normalMapScaleOffset.y)); mat.SetTextureOffset("_NormalMap", new Vector2(matState.normalMapScaleOffset.z, matState.normalMapScaleOffset.w)); } if (matState.parallaxMapTextureID != 0) { mat.SetTexture("_ParallaxMap", OvrAvatarComponent.GetLoadedTexture(matState.parallaxMapTextureID)); mat.SetTextureScale("_ParallaxMap", new Vector2(matState.parallaxMapScaleOffset.x, matState.parallaxMapScaleOffset.y)); mat.SetTextureOffset("_ParallaxMap", new Vector2(matState.parallaxMapScaleOffset.z, matState.parallaxMapScaleOffset.w)); } if (matState.roughnessMapTextureID != 0) { mat.EnableKeyword("ROUGHNESS_ON"); mat.SetTexture("_RoughnessMap", OvrAvatarComponent.GetLoadedTexture(matState.roughnessMapTextureID)); mat.SetTextureScale("_RoughnessMap", new Vector2(matState.roughnessMapScaleOffset.x, matState.roughnessMapScaleOffset.y)); mat.SetTextureOffset("_RoughnessMap", new Vector2(matState.roughnessMapScaleOffset.z, matState.roughnessMapScaleOffset.w)); } mat.EnableKeyword(OvrAvatarComponent.LayerKeywords[matState.layerCount]); for (ulong layerIndex = 0; layerIndex < matState.layerCount; layerIndex++) { ovrAvatarMaterialLayerState layer = matState.layers[layerIndex]; mat.SetInt(OvrAvatarComponent.LayerSampleModeParameters[layerIndex], (int)layer.sampleMode); mat.SetInt(OvrAvatarComponent.LayerBlendModeParameters[layerIndex], (int)layer.blendMode); mat.SetInt(OvrAvatarComponent.LayerMaskTypeParameters[layerIndex], (int)layer.maskType); mat.SetColor(OvrAvatarComponent.LayerColorParameters[layerIndex], layer.layerColor); if (layer.sampleMode != ovrAvatarMaterialLayerSampleMode.Color) { string surfaceProperty = OvrAvatarComponent.LayerSurfaceParameters[layerIndex]; mat.SetTexture(surfaceProperty, OvrAvatarComponent.GetLoadedTexture(layer.sampleTexture)); mat.SetTextureScale(surfaceProperty, new Vector2(layer.sampleScaleOffset.x, layer.sampleScaleOffset.y)); mat.SetTextureOffset(surfaceProperty, new Vector2(layer.sampleScaleOffset.z, layer.sampleScaleOffset.w)); } if (layer.sampleMode == ovrAvatarMaterialLayerSampleMode.Parallax) { mat.EnableKeyword("PARALLAX_ON"); } mat.SetColor(OvrAvatarComponent.LayerSampleParametersParameters[layerIndex], layer.sampleParameters); mat.SetColor(OvrAvatarComponent.LayerMaskParametersParameters[layerIndex], layer.maskParameters); mat.SetColor(OvrAvatarComponent.LayerMaskAxisParameters[layerIndex], layer.maskAxis); } }