New Renderer (OpenGL 3.3)
-
Currently there is the base texture (RGBA) and greyscale for roughness, specular intensity (mixes between diffuse and specular so it basically is percent) and metalness. For the last ones you can also set fixed parameters in the material library file, so you don’t necessarily need textures for those.
And of course there are the heightmap and normalmap textures. The heightmap should only contain very rough heights, as the fine details are in the normal map. It is also used to bake the self shadowing into the normal map (Valve’s ssbumps). You can consider replacing them with real geometry so you don’t need them at all.
I will try to post the blender shading pipeline graph soon when I got the time for it.
Edit: Forgot the standard FL texture variants. They did not change, so emissive and detail texture etc. is of course supported, since FL uses it.
-
Okay ty. But i still cant figure out what is roughness and metalness.
In my workflow i have:
reflection - map for a color and intensity of reflection, somehow multiplied by Fresnel IOR value with base of 1.6. I guess full mechanics of this is almost something as your specular intensity, but using a falloff of Fresnel type. Is that possible in games?
reflection glossiness - a grayscale map or value for smoothness of reflection, where value of 1 making reflection sharp as plain reflection map without modification, and values around 0.75-0.65 making it much more realistic for metals;
asssigning a map allows this at certain places. Is that the one you call roughness?edit: i’ve just found that one: https://docs.chaosgroup.com/display/CWVRAYMAX/Metalness
but i still cant get why roughness shall be used in some “glossiness” in BRDF (not the same as reflection glossiness i told above, i dont know what is that). Anyway i dont own that version of vray that has “metalness”, although i still can attempt to draw it, but for that i need to figure out what exactly it does. -
Glossiness is just the opposite of roughness, so if you invert the texture / value it means the same. In you picture the value of 1 glossiness is 0 roughness and 0.1 glossiness is 0.9 roughness. There might be some differences how some BRDF formulas treat those values, though. So depending on the light model, the same roughness value can look different.
Your reflection RGB texture is also a way to do it (actually I had it included in my shader), but I came to the conclusion that it is easier just to use one base colour texture for everything and do the rest with the greyscale textures / material parameters. This also saves memory and bandwidth.
Metalness just defines how much of the reflection is based on the color texture. If it is 0 the reflection will just be pure white colour like plastic.
If you find a case where the material can not be recreated with my current setup I can adapt it.
-
Your reflection RGB texture is also a way to do it (actually I had it included in my shader), but I came to the conclusion that it is easier just to use one base colour texture for everything and do the rest with the greyscale textures / material parameters. This also saves memory and bandwidth.
Yeah i also do this and to differ it (for scratches or worn effects f.e.) i use material blending by some dirt masks, where almost same materials have different reflection values.
Got ya, just my inverted reflection glossiness.Metalness just defines how much of the reflection is based on the color texture. If it is 0 the reflection will just be pure white colour like plastic.
So its a kind of linear dodge multiplier of typical reflection map? Dont get it.
I’ve found a pic how Fresnel reflections work with an IOR value. So it basically applies that mechanics to reflection map and power of reflection is defined by IOR value.
I am not aware if rasterisation engines is capable of this or it is RT only, but would like to hear your opinion:
As i know that mechanics is considered most realistic in term of reflections. -
Fresnell is only part of today’s lightning models. So yes it is included, but it is only one term of the whole equation. If you really want to know the whole model, look for the GGX stuff, which even blender uses.
You can imagine the metallness as a blend between white texture and the base colour texture. The more it becomes zero, the more the base colour for the reflection is going to be white. Imagine a billiard ball. The reflection is always white no matter what colour it has. So metalness is 0. If you choose a golden colour as base colour texture you will get colour shifts etc. when you set metalness to 1. If it is zero it only will have white reflections and it will look like plastic with gold colour.
-
So it’s been a while. I was able to reverse quite a bit more and also could integrate it into the shadow rendering. This means some big performance wins plus some other benefits.
Here is a video with the current state: http://www.flnu.net/downloads/fl0210.mp4
Notice, that the moving shadow at the beginning would not have been possible before, since it is offscreen. Also I would not get about 100fps, it was more around 40.
Also currently there is no lighting attenuation. I need to somehow integrate the curves FL allows you to customize.
I am still fighting a bit with the coordinate system FL uses, so this is one blocker. But all in all this is a huge progress, so there is not that much left to do now.
-
when you are done FL can be sold as next gen game again
-
Hehe, thanks!
Here are three other videos:
http://www.flnu.net/downloads/fl0310.mp4
http://www.flnu.net/downloads/fl0310_2.mp4
http://www.flnu.net/downloads/fl0310_3.mp4I am very pleased with the current look and will try to keep the direction. Tell me what you guys think. Are there still problems with the look? Or is it perfectly fine? Better than fine?
-
It surely looks good enough to be worthy of “better than fine”!
What (in a nutshell, and in layman’s terms) does you project entail? Will you be ‘releasing’ a graphically revamped version of FL? Do you, apart from the graphics rendering, still use all the files that make up the game? Or are you writing a whole new engine? (BTW I apologize if I bore / bother you with these questions; feel free to ignore!)
-
The look is great.
It is more than old FL players could dream of.
But I assume you suffer the same disease most of us have… the wish to make it perfect. The problem with that is, once you get a step closer to perfection you run across many new ideas which would make it even better. Am I correct? -
I agree with OP, looks great, how Freelancer should have looked like in the beginning . But trying to reach perfection, imo, you might get burnt out. I believe you have other projects that you have started that I’m sure you would like to work on again. You can always take a break from it, work on other things then come back with more ideas for this. But its your baby, you do what you want to. Really impressive work though
-
I know what you guys mean. You are talking about the well known “feature creep”. While it might look that way, there is actually a goal I had (and still have) for the first release:
- Good looking shadows
- Good rendering quality so it does not look artificial
- A (somewhat acceptable) material system
- Acceptable performance
- No problematic bugs and enough polish for release
For the current state only the last one is open now. So as you can see there is quite a large progress already made.
Stuff I have on my list for after release:
- More lights, especially make running lights real lights
- Add bloom support (currently there is only exposure control)
- Automatic exposure control (from Valve HL2 paper)
- More baked in reflections so that e.g. nebula not in the starspheres are also reflected
- More performance optimizations
- … (here you can add literally endless stuff which you could do)
I intend to make it a mod so in the end everyone can use it. I am thinking about to exclude mods who stole stuff from others, so that they can learn the hard way why stealing is not good. Why should I respect their work if they don’t respect the work of others. I am still open for feedback on this, though.
At first I will release it for our mod only, so problems can be found more quickly. After a while I plan to create a standalone mod on Moddb with only the graphics enhancements for others to use. Hopefully FL will live a bit longer that way.
As for the files: The models in the videos are from vanilla FL. They just use height and normal maps. I upscaled the textures using a self build and trained neural net plus some automatic post processing. Regarding the engine: Basically I replaced the end of the rendering pipeline from FL with my stuff. So maybe its half a new rendering engine. Some stuff still gets just passed through.
I did some tests with eigos and it looks like we have a usable workflow for exporting stuff and use it with my new rendering system. Here is a video from an asteroid eigos created: http://www.flnu.net/downloads/flroid02_4.mp4 . It uses height, normal, roughness and metalness maps.
It seems like everyone is happy with the way the rendering looks now (me included), so I won’t touch that anymore as far as I am able to.
Edit: Replaced the video with a one where the shadows aren’t bugged due to wrong bias.
Edit2: After some map and parameter tuning: http://www.flnu.net/downloads/flroid02_8.mp4 -
I haven’t read the 20+ pages but I’ve seen some pictures and they are absolutely beautiful
-
Thanks!
I was able to reverse the list of asteroids which are about to be rendered and integrate it into the shadow rendering. Also I now automatically generate the necessary TBN data for normal maps etc. on asteroids, because FL does not support saving them into the models.
The result can be seen in this video: http://www.flnu.net/downloads/fl1011.mp4
Costs a lot of FPS currently despite of instancing, so improving it is the next step.
-
TBN data could be put and spread across uv mapping vectors in VMeshData. FL materials don’t use more than two uv maps, so six more channels as defined by FVF are free for the taking. Some quantization techniques could be employed to compress into fewer bits. Though if the cost of generating them on the fly isn’t hitting performance it might not be as useful.
-
Thank you, I really like the look, too!
@Treewyrm: Thanks for the hints, but I know that. The problem is, that FL does not support more than two texture coordinates when rendering asteroids. So the only other option would be to load the model yourself instead of letting FL do it. This is an option for the future, since you also only can use one material, so it would be an improvement. For normal models, the TBN data already is stored into additional texture coordinates.
-
While I did some internal progress, here are the latest results of my texture upscaling attempts:
As you can see this takes the game to a whole new level. Some example videos are here:
http://www.flnu.net/downloads/FL2411.mp4
http://www.flnu.net/downloads/FL2411_2.mp4Keep in mind that the material settings are not tweaked yet, so there is still room for improvement. Currently there is only one different one for glass. The rest uses the same one where I quickly tested some values and chose the best looking. If you have a different taste you could make all reflections super smooth etc.
-
Is it ESRGAN, PPON, or your own model ?
I tried Misc x4 pretrained model for ESRGAN and the result was kinda good. Then I tried PPON and for some details it’s better than Misc x4. PPON can’t support alpha channel so I need to extract alpha channel with GIMP.
On the one hand edit is better than upscale but on the other hand upscale helps a lot if you want the best accuracy as possible.
Here is a sample of liberty AI upscale I did. I warn you that I had to do 128x128 parts from 256x256 textures cause my computer isn’t using CUDA cores and, as always, has outdated components… The window part has been done with PPON. liberty_256 is the original and 1024 is the Misc 4x one.