orels1 / orels-Unity-Shaders

A collection of practical Unity shaders for your next project
https://shaders.orels.sh
Other
169 stars 14 forks source link

Seperate image slots for roughness and occlusion #1

Closed makidoll closed 1 year ago

makidoll commented 2 years ago

I'd really love to use your shaders, its really awesome but there's no separate slots for roughness/smoothness and occlusion. I'm using Autodesk Interactive for all my materials which don't include more than albedo, roughness, normal and occlusion maps.

I recently unpacked a lot of my textures from glTF's orm format to separate maps because it's easier to work with, though it would really suck if I had to manually make maps like that again. I don't know if it's possible to make a compile step to automatically optimize occlusion, roughness and metallic or more together.

Thanks! Maki

orels1 commented 2 years ago

Hey! Currently it is all combined together to save on texture lookups, having it all split is the most vram/size/gpu perf heavy way of doing it, so I decided to make it so the textures are expected to be merged together, as exported from tools like Substance or when using textures from asset packs.

At this moment I can only recommend using some kind of free texture packer, like https://github.com/andydbc/unity-texture-packer

There might be a chance of me adding a built-in texture packer in the future, but for now its a bit out of scope of this shader package I'm afraid

makidoll commented 2 years ago

Okay, I see. It's just that as a content creator who's been working with glTF for the last 3 years, I'm really worn out having to pack and unpack maps between projects. I really wish it could be a transparent process, such as Unity automatically packing channels in the material for you. I'll see if I can make a script that makes it feel like its not in the way. Thanks for the reply, and open sourcing too!

orels1 commented 2 years ago

Is there a reason maps from glTF have to be split? Based on blender glTF 2.0 docs, it is common to have AO, Metal and Rough all in one texture?

Which youd be then able to use those in the shader directly

makidoll commented 2 years ago

Well its just that different platforms want different formats for occlusion, roughness and metallic and it's so frustrating. Blender still doesn't have an easy way to add occlusion and Unity's standard shader still uses smoothness which you put into the metallic rgb map's alpha. glTF is definitely like a, final optimized finished format where I'd expect the editor to have everything split.

The autodesk interactive shader has all the maps easily assignable and modifiable. I was playing with Silent's filamented shader which perfectly replaces the standard including roughness setup/autodesk interactive shader, then extends it.

I guess all this issue is about is making it easier to replace the standard shader, and then automatically optimize things when publishing. I modify my models a lot when working and it doesn't always come out of substance painter.

orels1 commented 2 years ago

I see. I'll keep that in mind, but yeah, my shader was primarily built as a standard replacement, with added channel remapping to be able to accept textures made for Unreal Engine (with roughness instead of Smooth, and textures packed together in the R: Metal, G: Roughness, B: AO format).

Sadly I don't really have nice access to my current shader project to even start implementing the packer, but hopefully that will be resolved soon enough

orels1 commented 2 years ago

I'm going to be adding a texture packer some time soon. I already got it working, but I need to think about the better ways of shipping it within the shader package

image

It allows you to repack your textures as you need within unity

orels1 commented 1 year ago

Since texture packer is in 6.x version, I'm going to close this issue. Feel free to pack your shaders right in the inspector!

More info here: https://shaders.orels.sh/docs/inspector/overview#texture-packer