Compare commits

...

2 Commits

Author SHA1 Message Date
Arkitu
50ad9ef6bc fix things
Some checks failed
Weekly beta compile test / test (macos-latest) (push) Has been cancelled
Weekly beta compile test / test (ubuntu-latest) (push) Has been cancelled
Weekly beta compile test / test (windows-latest) (push) Has been cancelled
Weekly beta compile test / lint (push) Has been cancelled
Weekly beta compile test / check-compiles (push) Has been cancelled
Weekly beta compile test / close-any-open-issues (push) Has been cancelled
Weekly beta compile test / Warn that weekly CI fails (push) Has been cancelled
2025-07-20 11:54:19 +02:00
Arkitu
922b1c9fd1 add interpolation setting to pbr based on 0.16.1 release 2025-07-20 10:14:32 +02:00
6 changed files with 55 additions and 1 deletions

View File

@ -756,7 +756,7 @@ unsafe fn CompareSubGroups(mut pg1: *const SSubGroup, mut pg2: *const SSubGroup)
return false;
}
while i < (*pg1).iNrFaces as usize && bStillSame {
bStillSame = if (*pg1).pTriMembers[i] == (*pg2).pTriMembers[i] {
bStillSame = if (&(*pg1).pTriMembers)[i] == (&(*pg2).pTriMembers)[i] {
true
} else {
false

View File

@ -0,0 +1,9 @@
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
#[derive(Debug, Copy, Clone, PartialEq, Eq, Default, Reflect)]
#[reflect(Default, Clone, PartialEq)]
pub enum InterpolationMethod {
#[default]
Linear,
Flat,
}

View File

@ -31,6 +31,7 @@ pub mod decal;
pub mod deferred;
mod extended_material;
mod fog;
mod interpolation;
mod light;
mod light_probe;
mod lightmap;
@ -53,6 +54,7 @@ pub use components::*;
pub use decal::clustered::ClusteredDecalPlugin;
pub use extended_material::*;
pub use fog::*;
pub use interpolation::*;
pub use light::*;
pub use light_probe::*;
pub use lightmap::*;

View File

@ -386,6 +386,23 @@ pub struct StandardMaterial {
///
/// [`Mesh::generate_tangents`]: bevy_render::mesh::Mesh::generate_tangents
/// [`Mesh::with_generated_tangents`]: bevy_render::mesh::Mesh::with_generated_tangents
///
/// # Usage
///
/// ```
/// # use bevy_asset::{AssetServer, Handle};
/// # use bevy_ecs::change_detection::Res;
/// # use bevy_image::{Image, ImageLoaderSettings};
/// #
/// fn load_normal_map(asset_server: Res<AssetServer>) {
/// let normal_handle: Handle<Image> = asset_server.load_with_settings(
/// "textures/parallax_example/cube_normal.png",
/// // The normal map texture is in linear color space. Lighting won't look correct
/// // if `is_srgb` is `true`, which is the default.
/// |settings: &mut ImageLoaderSettings| settings.is_srgb = false,
/// );
/// }
/// ```
#[texture(9)]
#[sampler(10)]
#[dependency]
@ -752,6 +769,8 @@ pub struct StandardMaterial {
/// The transform applied to the UVs corresponding to `ATTRIBUTE_UV_0` on the mesh before sampling. Default is identity.
pub uv_transform: Affine2,
pub interpolation_method: InterpolationMethod,
}
impl StandardMaterial {
@ -907,6 +926,7 @@ impl Default for StandardMaterial {
opaque_render_method: OpaqueRendererMethod::Auto,
deferred_lighting_pass_id: DEFAULT_PBR_DEFERRED_LIGHTING_PASS_ID,
uv_transform: Affine2::IDENTITY,
interpolation_method: InterpolationMethod::Linear,
}
}
}
@ -1210,6 +1230,7 @@ bitflags! {
const CLEARCOAT_NORMAL_UV = 0x100000;
const SPECULAR_UV = 0x200000;
const SPECULAR_TINT_UV = 0x400000;
const FLAT_INTERPOLATION = 0x800000;
const DEPTH_BIAS = 0xffffffff_00000000;
}
}
@ -1334,11 +1355,17 @@ impl From<&StandardMaterial> for StandardMaterialKey {
);
}
key.set(
StandardMaterialKey::FLAT_INTERPOLATION,
material.interpolation_method == InterpolationMethod::Flat,
);
key.insert(StandardMaterialKey::from_bits_retain(
// Casting to i32 first to ensure the full i32 range is preserved.
// (wgpu expects the depth_bias as an i32 when this is extracted in a later step)
(material.depth_bias as i32 as u64) << STANDARD_MATERIAL_KEY_DEPTH_BIAS_SHIFT,
));
key
}
}
@ -1499,9 +1526,14 @@ impl Material for StandardMaterial {
StandardMaterialKey::SPECULAR_TINT_UV,
"STANDARD_MATERIAL_SPECULAR_TINT_UV_B",
),
(
StandardMaterialKey::FLAT_INTERPOLATION,
"STANDARD_MATERIAL_FLAT_INTERPOLATION",
),
] {
if key.bind_group_data.intersects(flags) {
shader_defs.push(shader_def.into());
descriptor.vertex.shader_defs.push(shader_def.into());
}
}
}
@ -1524,6 +1556,7 @@ impl Material for StandardMaterial {
depth_stencil.bias.constant =
(key.bind_group_data.bits() >> STANDARD_MATERIAL_KEY_DEPTH_BIAS_SHIFT) as i32;
}
Ok(())
}
}

View File

@ -34,7 +34,11 @@ struct VertexOutput {
// and `frag coord` when used as a fragment stage input
@builtin(position) position: vec4<f32>,
@location(0) world_position: vec4<f32>,
#ifdef STANDARD_MATERIAL_FLAT_INTERPOLATION
@location(1) @interpolate(flat) world_normal: vec3<f32>,
#else
@location(1) world_normal: vec3<f32>,
#endif
#ifdef VERTEX_UVS_A
@location(2) uv: vec2<f32>,
#endif
@ -45,8 +49,12 @@ struct VertexOutput {
@location(4) world_tangent: vec4<f32>,
#endif
#ifdef VERTEX_COLORS
#ifdef STANDARD_MATERIAL_FLAT_INTERPOLATION
@location(5) @interpolate(flat) color: vec4<f32>,
#else
@location(5) color: vec4<f32>,
#endif
#endif
#ifdef VERTEX_OUTPUT_INSTANCE_INDEX
@location(6) @interpolate(flat) instance_index: u32,
#endif

2
rust-toolchain.toml Normal file
View File

@ -0,0 +1,2 @@
[toolchain]
channel = "nightly"