use serde::{Deserialize, Serialize};
pub const VRMC_MATERIALS_MTOON: &str = "VRMC_materials_mtoon";
#[cfg(feature = "rustc_hash")]
use rustc_hash::FxHashMap as HashMap;
#[cfg(not(feature = "rustc_hash"))]
use std::collections::HashMap;
#[cfg(feature = "gltf_index")]
use gltf::json::texture::Info as TextureInfo;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VrmcMaterialsMtoonSchema {
#[serde(skip_serializing_if = "Option::is_none")]
pub extensions: Option<HashMap<String, HashMap<String, Option<serde_json::Value>>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extras: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gi_equalization_factor: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub matcap_factor: Option<[f64; 3]>,
#[serde(skip_serializing_if = "Option::is_none")]
pub matcap_texture: Option<TextureInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outline_color_factor: Option<[f64; 3]>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outline_lighting_mix_factor: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outline_width_factor: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outline_width_mode: Option<OutlineWidthMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outline_width_multiply_texture: Option<TextureInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parametric_rim_color_factor: Option<[f64; 3]>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parametric_rim_fresnel_power_factor: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parametric_rim_lift_factor: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub render_queue_offset_number: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rim_lighting_mix_factor: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rim_multiply_texture: Option<TextureInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shade_color_factor: Option<[f64; 3]>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shade_multiply_texture: Option<TextureInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shading_shift_factor: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shading_shift_texture: Option<ShadingShiftTextureInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shading_toony_factor: Option<f64>,
pub spec_version: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub transparent_with_z_write: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uv_animation_mask_texture: Option<TextureInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uv_animation_rotation_speed_factor: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uv_animation_scroll_x_speed_factor: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uv_animation_scroll_y_speed_factor: Option<f64>,
}
#[cfg(not(feature = "gltf_index"))]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TextureInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub extensions: Option<HashMap<String, HashMap<String, Option<serde_json::Value>>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extras: Option<serde_json::Value>,
pub index: usize,
#[cfg(feature = "gltf_index")]
#[serde(skip_serializing_if = "Option::is_none")]
pub tex_coord: Option<gltf::json::Index<gltf::json::Accessor>>,
#[cfg(not(feature = "gltf_index"))]
#[serde(skip_serializing_if = "Option::is_none")]
pub tex_coord: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ShadingShiftTextureInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub extensions: Option<HashMap<String, HashMap<String, Option<serde_json::Value>>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extras: Option<serde_json::Value>,
#[cfg(feature = "gltf_index")]
pub index: gltf::json::Index<gltf::json::Texture>,
#[cfg(not(feature = "gltf_index"))]
pub index: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub scale: Option<f64>,
#[cfg(feature = "gltf_index")]
#[serde(skip_serializing_if = "Option::is_none")]
pub tex_coord: Option<gltf::json::Index<gltf::json::Accessor>>,
#[cfg(not(feature = "gltf_index"))]
#[serde(skip_serializing_if = "Option::is_none")]
pub tex_coord: Option<usize>,
}
#[derive(Debug, Clone, Copy, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum OutlineWidthMode {
None,
ScreenCoordinates,
WorldCoordinates,
}