kwan's note

opengl - 유니폼 (uniform) 본문

graphics VR AR/OpenGL

opengl - 유니폼 (uniform)

kwan's note 2022. 5. 5. 13:05
반응형

opengl super bible 6판을 읽고 작성하였습니다.

 

opengl에서 uniform은 vertex별로 다른 값을 갖는 attribute와 다르게 전체 primitive에게 동일하게 적용되는 속성을 말한다. shader에서는 이러한 변수 선언시 uniform변수를 넣는것으로 선언이 가능하다.

vertex shader에서 uniform의 값을 바꾸는것은 불가능하지만 선언은 할 수 있다.

 

그렇다면 이런 uniform은 언제 사용될까?

가장 일반적인 사용처는 변환행렬이 될 것이다. 하나의 모델에게 공통적으로 적용되는 값이기 때문이다. 즉 model view projection matrix가 이러한 uniform으로 선언된 변수를 통해 전달된다.

 

c++프로그램 내에서 uniform은 glUniform*을 통해 선언이 가능하다.

https://docs.gl/gl4/glUniform

 

glUniform - OpenGL 4 - docs.gl

Name glUniform — Specify the value of a uniform variable for the current program object C Specification void glUniform1f( GLint location, GLfloat v0); void glUniform2f( GLint location, GLfloat v0, GLfloat v1); void glUniform3f( GLint location, GLfloat v0

docs.gl

 

만약 matrix를 선언하고자 한다면 glUniformMatirx*로 선언하면 되고 포인터를 이용하고자 한다면 맨뒤에 v를 붙임으로서 가능하다 (예를들면 glUniform4fv orglUniformMatrix4fv)

 

하지만 하나의 uniform만 쓰지는 않을것이고 복잡한 쉐이더의 경우 uniform block을 만들어 사용하는것이 더 효율적이다.(성능상으로도) 즉, 매번 gluniform을 호출하는것이 성능저하를 불러일으키므로 하나의 uniform block을 만들어서 사용하자.

 

unform block은 다음과 같이 선언된다.

layout (std140) uniform ExampleBlock
{
    float value;
    vec3  vector;
    mat4  matrix;
    float values[3];
    bool  boolean;
    int   integer;
};

이때 각각의 buffer는 촘촘히 패킹되지 않고 사용한 패킹룰을 따르게 된다.

 

추가적으로 uniform block에 관한 자세한 내용은 다음 강의에서 다루고자 한다.

 

이제 실제로 uniform을 가장 많이 이용하는 geometry를 변경에는 다음과 같은 matrix를 사용한다.

 

반응형

'graphics VR AR > OpenGL' 카테고리의 다른 글

[Opengl] phong lighting - 라이팅  (0) 2022.08.01
Opengl - VAO VBO 컴퓨터 그래픽스  (1) 2022.04.28
openGL  (0) 2022.03.30