Coder Social home page Coder Social logo

Comments (5)

sotrh avatar sotrh commented on July 26, 2024

I'm not using normal = normal * 2.0 - 1.0 specifically because I'm using Rgba8UnormSrgb. Doing it this way was suggested by the wgpu guys. Apparently, according to them, Rgba8UnormSrgb outputs colors in the range [-1.0, 1.0], perfect for normals. I'm not an expert on texture formats, but the results look correct to me.

from learn-wgpu.

StarArawn avatar StarArawn commented on July 26, 2024

You can see the difference here:
https://en.wikipedia.org/wiki/SRGB#/media/File:Cie_Chart_with_sRGB_gamut_by_spigget.png
You lose a lot of range of color by using SRGB. Not to mention it's outside of the typical use case of most engines/tools.

Another article about it:
https://medium.com/@bgolus/generating-perfect-normal-maps-for-unity-f929e673fc57#b86c

from learn-wgpu.

cwfitzgerald avatar cwfitzgerald commented on July 26, 2024

Rgba8Unorm should still work with a texture2D in shaders, though both Rgba8Unorm and Rgba8UnormSrgb return data as [0.0, 1.0] when sampled as a float. Rgba8Snorm would return values in the range [-1.0, 1.0], though I think to get the proper behavior you should have a Rgba8Unorm texture with manual * 2 - 1 scaling.

from learn-wgpu.

sotrh avatar sotrh commented on July 26, 2024

The textures appear washed out when I use Rgba8Unorm and * 2 - 1 scaling.
Screenshot from 2020-06-07 13-07-12

Sorry about the lack of communication on my part. I've been hunting down running wgpu on Android.

from learn-wgpu.

StarArawn avatar StarArawn commented on July 26, 2024

I would still use SRGB for the color texture as they are typically made in SRGB color space. When you generate normal maps they are generated in linear color space. It does mean when loading the textures in you have to determine whether it is a normal texture or a color texture. In my engine I use a ron file, but you could just as easily have something like: load_texture(path: Path, is_srgb: boolean)

from learn-wgpu.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.