OpenGL Tutorial 27 - Normal Maps

  Рет қаралды 18,892

Victor Gordan

Victor Gordan

Күн бұрын

Пікірлер: 40
@shinystick241
@shinystick241 3 жыл бұрын
Your channel is growing so fast man, all the best!
@VictorGordan
@VictorGordan 3 жыл бұрын
Thank you, especially for leaving nice comments for me and our overlord, the algorithm! ^-^
@VictorGordan
@VictorGordan 3 жыл бұрын
-Small mistake! As Charles van Noland pointed out, the bricks look sunken in rather than popping out (honestly didn't see this untill it was pointed out haha). A quick fix to this is to inverse the bitangent by putting a negative sign in front of it ;)- Ok... I discovered the actual problem... STANDARDIZATION :'( The normal map was inverted on the y axis as for the DirectX way of doing textures, while the OpenGL one is the opposite... So the real solution is to manually flip the textures in an image editing software :/
@AcceleratedVelocity
@AcceleratedVelocity Жыл бұрын
i used ambientCG and wondered why they had 2 normals (normalDX and normalGL) and y blender defaults to -z as forward axis. now i know
@D3xt3rity
@D3xt3rity 3 жыл бұрын
Would you consider covering PBR in a video? I absolutely love your content!! Thank you!
@VictorGordan
@VictorGordan 3 жыл бұрын
Yup, PBR will be one of the last things I cover in OpenGL ;)
@D3xt3rity
@D3xt3rity 3 жыл бұрын
@@VictorGordan Whoop! I cant wait to see it!!!!
@mitchellkelly241
@mitchellkelly241 3 жыл бұрын
Amazing as always! 😋
@VictorGordan
@VictorGordan 3 жыл бұрын
Thank you! Supportive as always :d
@shootingstaa
@shootingstaa 7 ай бұрын
you saved my graphics homework
@D3xt3rity
@D3xt3rity 3 жыл бұрын
NEW VIDEO HYPE!!!
@VictorGordan
@VictorGordan 3 жыл бұрын
🎉
@MustafaBerkeGureltol
@MustafaBerkeGureltol 2 жыл бұрын
How are normal maps applied to the surface with a) averaged vertex normals, and b) face-weighted vertex normals, or on a surface in general? Are the pixels on normal map get added, multiplied to/with the normals of the surface?
@VictorGordan
@VictorGordan 2 жыл бұрын
Honestly, I do not know. But I assume you apply some sort of interpolation 🤔
@hugofoltin5647
@hugofoltin5647 3 жыл бұрын
new mic? I like it
@VictorGordan
@VictorGordan 3 жыл бұрын
Good observation 🧐 I still need to work out some settings, but it already sounds much better than the last one! :,)
@rachit7645
@rachit7645 2 жыл бұрын
I have a couple issues with this tutorial: 1. Why are you using a geometry shader if you don't need one? Geometry shaders generally have a lot of overhead on them. So using them for no reason just slows the application down. 2. You should use pre-calculated tangents and bitangents. Actually, you only need the tangent and then you can use a cross product to get the bitangent in the shader. 3. You should calculate the TBN matrix in the vertex shader instead of the geometry shader of the given reasons.
@VictorGordan
@VictorGordan 2 жыл бұрын
This was a while ago and I don't remember exactly what the code looks like, so what I'll say might not make sense, but: 1. Because I didn't know how to use compute shaders at the time and I wanted to generate the tangents and bitangents in real time. Also, using geometry shaders seemed like the most intuitive way to do this (not the best way of course). 2. Read 1 3. Read 2 haha Thx for pointing those issues out though! I should have probably made it clear that this is not the most optimal way to do it...
@AcceleratedVelocity
@AcceleratedVelocity Жыл бұрын
i mean it IS realy janky passing in 3 different verticies into the vertex shader, like that's unreadable. also some might need the geometry shader
@AcceleratedVelocity
@AcceleratedVelocity Жыл бұрын
actualy it does have overhead if u do it in vert shader
@AcceleratedVelocity
@AcceleratedVelocity Жыл бұрын
i know u moved the light, cam, etc into the nomal but i think thats slower, u see, the shader dimension is different then the cpu code dimension, bcuz they're executed in PARALEL on gpu (basically less instructions, more FPS). also on frag it only runs on the visable fragments so yeah, ima go with TBN * norm_map
@Gille-mm1cr
@Gille-mm1cr 4 ай бұрын
How do you do apply a normal map on a sphere?
@CharlesVanNoland
@CharlesVanNoland 3 жыл бұрын
Looks like your XY normalmap values (red/green) are backwards, causing your lighting to look like the brick is sunken into the mortar.
@VictorGordan
@VictorGordan 3 жыл бұрын
Hmmm...are they? To me it looks like it's popping out 😅 I don't really get what you mean by "backwards" tbh.
@sneper53
@sneper53 3 жыл бұрын
Pls upload about bullet physics in the next tutorials.
@diahaidificbs
@diahaidificbs 2 жыл бұрын
Hey Victor, when trying to load the normal texture, program crashes with error “nvoglv64.pdb not loaded”. I copied your texture and fragment shader code and still get the same error 🙁.
@VictorGordan
@VictorGordan 2 жыл бұрын
There might be something wrong with your vertex attributes. From what I remember when I encountered this before it's a pretty nasty error, could be multiple things...
@diahaidificbs
@diahaidificbs 2 жыл бұрын
@@VictorGordan well I’m trying to apply a normal map to a .gltf model and looking at vertex attributes, everything seems to be in order, I can in fact do the process of loading the texture for any texture type except “normal”. Any idea on how to fix it? Btw tnx for the reply man
@VictorGordan
@VictorGordan 2 жыл бұрын
Hmmmm, make sure your loading parameters are correct, so the depth and number or values (RGBA) should be correct. Otherwise I have no clue what it could be
@diahaidificbs
@diahaidificbs 2 жыл бұрын
@@VictorGordan I kinda found why it’s happening, the error only occurs when I try to change the format (not InternalFormat) of “normal” texture from GL_RGB to GL_RGBA in texture.cpp. Don’t know whether the results are the same or not without alpha…thanks a lot victor ❤️🙏🏻
@VictorGordan
@VictorGordan 2 жыл бұрын
The results should be the same without alpha
@gehenhajso1037
@gehenhajso1037 3 жыл бұрын
You are my dream come true
@VictorGordan
@VictorGordan 3 жыл бұрын
^-^
@sneper53
@sneper53 3 жыл бұрын
pls upload about bullet physics in next tutorials.
@VictorGordan
@VictorGordan 3 жыл бұрын
I am planning on making a physics series in the future, but not anytime soon, sorry :(
@willyjacquet4436
@willyjacquet4436 3 жыл бұрын
"The fragment shader runs many times more than the geometry shader, it is preferable to [do it on the geometry shader]" Dangerous baseless claim. Have you benchmarked it ? I could give a few arguments as to why you should avoid geometry shaders in the first place. Tangents can and should probably be precomputed in the first place. That's a memory-speed tradeoff that is often taken. Most 3D formats will provide them for you anyway and most model loaders are able to compute them too. Remainders on normal matrices could have been great also. So yeah, the video is just as outdated as the tutorial on learnopengl.com is... since it's mot much more than just parroting. Well you're probably learning at the same time that you're doing these tutorials. But what a pity, I believe you can do better than that; if I wanted to follow the learnopengl.com tutorial, I might as well go see the original one because I don't see much added value here.
@VictorGordan
@VictorGordan 3 жыл бұрын
I did not benchmark it. And yeah, I suppose it might be false? But I think I do specify they should be precomputed (at least I hope I did lol) I am indeed learning at the same time (I explain my reasoning for this in the Q&A). What exactly is outdate about the method? I am actually curious. I searched for papers on this stuff but there really aren't that many new ones I could find... :( And I am transparent about the fact I use learnopengl. I openly state it in the first tutorial and link to it everywhere on my channel. Even the creator of the website knows it and he said he likes my tutorials. About "parroting". Some of my tutorials do differ quite a bit from the stuff on the website. Many people read the website and also use my videos at the same time (they said it's a good combination). I did come up with a different and much more efficient method for finding the correct UV for the parallax, but sadly it had some artefacts if the depth map had repeating sharp edges so I thought the method is not mature enough for the video yet and decided to go with the slower but proven method.
@VictorGordan
@VictorGordan 3 жыл бұрын
Also, if you don't see much value here, just stop watching ;) Others see value in my tutorials (and they know about the existence of learnopengl). I would like to please everyone and help everyone, but sadly that's just not possible. Thanks for the feedback though! I appreciate some more negative feedback so I know how to improve. And if u want original content, stick around for the next series :p
@willyjacquet4436
@willyjacquet4436 3 жыл бұрын
@@VictorGordan I apologize if I came off as rude or condescending, I precisely gave negative feedback because I see potential in your content, not because I want to degrade you in any way. The method isn't outdated; the OpenGL used is. Many of the functions used could be replaced with more modern ones, removing most of OpenGL global state access. I still see a lot of people (even professionals) that don't know about them. I feel like that's reasonable for a learning resource in 2021 to be at least up to date on that front; that would be added value right there. Same thing with geometry shaders; since tesselation and compute shaders, they're mostly an artifact of the past. I cannot make any comment over your other content as I've not seen any of it. But it pretty much irrelevant to me as this video seems to be self contained; and should probably be as much as possible. (I mean I found it by typing "normal mapping opengl", not by searching for a playlist about learning OpenGL). When I said that the video doesn't have any added value over learnopengl, that's what it means. It has value, but nothing more than in the original material. It has the same faults too. Same pedagogy. Even the same models. I mean come on, at least try to show something more interesting than that brick wall. Being a beginner is something valuable, you've a sensibility to what is difficult. And I don't feel that being reflected in your explanations, I don't know what you found to be lacking in the original material, what difficulties you had, what made things click for you. That would have been valuable to me. That's why I called it "parroting". But once again, I haven't seen any of your other content. So perhaps it is much more personal and go further what is done on learnopengl. Perhaps you just wanted to get done with normal mapping and don't have much interest in it. Perhaps I expected something too different as my experience with normal mapping very unlike what you show (even though I went through this very same tutorial). Also you don't get to tell me what I should watch or not since you showed up in my search for normal mapping videos ;) I still look forward to your next content tho. So good luck with that.
@VictorGordan
@VictorGordan 3 жыл бұрын
​@@willyjacquet4436 No problem, sorry if it seemed like I tried to silence you by deleting your comment. KZbin marked it as spam for some reason and it only allowed me to approve it to go public now :/ I hate it when KZbin automatically clears up my comment section Yes, very fair, the methods used are indeed outdated. But I have a reason for that :) I am using 3.3 so that more people can follow the tutorials. Quite a few people in my Discord channel told me their GPUs don't support OpenGL 4.0+. Even with 3.3 sadly not everyone can follow... In my personal projects I am using OpenGL 4.6 and global state access from the extension GL_ARB_direct_state_access. And I plan on making "tips and tricks" videos at some point in the future after I am done with this series. To me the most important part of the series is the theory anyways. And the basic concepts of OpenGL (buffers, shaders, textures, etc). Well yes, some of my videos can be self contained, but they are best watched in a linear fashion, that's why I number them in order ;) Actually the models are different. I don't think I once used the same models... It isn't the same brick wall haha. I just decided to use a brick wall because I think the effect can be really well seen with brick walls haha Well in other tutorials I mention things that you should pay special attention to, but in this tutorial I really didn't find anything out of the ordinary. The method seems pretty straight forward to me. I think my tutorials are best seen in order honestly. And as I said, some of them are vastly different. The model loading one is completely different, I show how to make a basic glTF loader from scratch. Other vastly different tutorials would be the Camera one, and the Organizing one. Other don't differ so much, but they do differ. Can't control the KZbin algorithm ;P Well I hope I see you commenting again with some negative or positive feedback. Feedback is always appreciated :) PS: I was rambling on about "my own algorithm" because for a second I thought you commented on my Parallax Mapping video, that's where I initially wanted to use my modified Parallax Mapping algorithm but then decided it's not ripe enough haha
OpenGL Tutorial 28 - Parallax Occlusion Mapping
4:34
Victor Gordan
Рет қаралды 25 М.
What Is A Graphics Programmer?
30:21
Acerola
Рет қаралды 470 М.
Каха и дочка
00:28
К-Media
Рет қаралды 3,4 МЛН
Beat Ronaldo, Win $1,000,000
22:45
MrBeast
Рет қаралды 158 МЛН
coco在求救? #小丑 #天使 #shorts
00:29
好人小丑
Рет қаралды 120 МЛН
All OpenGL Effects!
30:21
Low Level Game Dev
Рет қаралды 69 М.
Normal Maps for Pixel Art
17:10
ThePassiveAggressor
Рет қаралды 113 М.
Normal Mapping Adventures // OpenGL Intermediate Series
18:42
Introduction to shaders: Learn the basics!
34:50
Barney Codes
Рет қаралды 381 М.
WTF are... NORMAL MAPS?
4:00
CGMatter
Рет қаралды 213 М.
Interactive Graphics 16 - Shadow Mapping
1:06:47
Cem Yuksel
Рет қаралды 13 М.
Rendering 2D objects - Software from scratch
1:45:23
Muukid
Рет қаралды 34 М.
I Made a Graphics Engine
6:42
Zyger
Рет қаралды 264 М.
OpenGL 3D Game Tutorial 31: Normal Mapping
21:45
ThinMatrix
Рет қаралды 65 М.
Каха и дочка
00:28
К-Media
Рет қаралды 3,4 МЛН