SSBump2Normal: Difference between revisions
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
 Note:After the normal map is generated you should invert the green channel if the map looks bad.
Note:After the normal map is generated you should invert the green channel if the map looks bad.
		
	
|  (Created page with "== Project ==  [https://github.com/rob5300/ssbumpToNormal rob5300's "ssbumpToNormal" github]  == How It Is Done == The Conversion Matrix in [https://www.rust-lang.org Rust] <s...") | No edit summary | ||
| Line 32: | Line 32: | ||
| } | } | ||
| </syntaxhighlight> | </syntaxhighlight> | ||
| {{note|After the normal map is generated you should invert the green channel if the map looks bad.}} | |||
| == Other Links == | == Other Links == | ||
Revision as of 12:19, 15 October 2024
Project
rob5300's "ssbumpToNormal" github
How It Is Done
The Conversion Matrix in Rust
const OO_SQRT_3: f32 = 0.57735025882720947f32;
static BUMP_BASIS_TRANSPOSE: [Vector3<f32>; 3] = [
    Vector3::new( 0.81649661064147949f32, -0.40824833512306213f32, -0.40824833512306213f32 ),
    Vector3::new(  0.0f32, 0.70710676908493042f32, -0.7071068286895752f32 ),
    Vector3::new(  OO_SQRT_3, OO_SQRT_3, OO_SQRT_3 )
];
Converting each pixel of the SSBump Map
for pixel in pixels {
        //Convert pixel colour to a vector
        let rgb = pixel.2;
        let pixel_vector = Vector3::new(rgb[0] as f32 / 255f32, rgb[1] as f32 / 255f32, rgb[2] as f32 / 255f32);
        //Convert normal vector back to traditional tangent normal
        let new_rgb = new_image.get_pixel_mut(pixel.0, pixel.1);
        new_rgb[0] = convert_vector(&pixel_vector, 0);
        new_rgb[1] = convert_vector(&pixel_vector, 1);
        new_rgb[2] = convert_vector(&pixel_vector, 2);
    }
The math function to convert each pixel
fn convert_vector(pixel: &Vector3<f32>, index: usize) -> u8 {
    return (((pixel.dot(BUMP_BASIS_TRANSPOSE[index]) * 0.5f32) + 0.5f32) * 255f32) as u8;
}
 Note:After the normal map is generated you should invert the green channel if the map looks bad.
Note:After the normal map is generated you should invert the green channel if the map looks bad.