Loading...
2012. 12. 14. 10:20

1. 왜 물은 물처럼 보이는 걸까?

왜 물은 물처럼 보이는 걸까? 사실 물을 만드는건 어느정도 정형화된, 뻔한 패턴이 존재한다. 거기에 가격대 성능비를 따져 꼼수를 쓰거나 하는 정도이다. 위키에서의 물의 정의는 간단하다. 물은 산소와 수소가 결합한 화학물질이며 표준온도 압력에서 무색투명하고, 무색무취하며 지표면의 70%정도를 덮고 있다. 가장 보편적인 용매로 보통 액체상태의 물을 가리키지만 고체 상태인 것을 얼음, 기체 상태인 것을 수증기라고 부른다. 즉, 물처럼 보일려면 우선 색깔이 없고 투명(시각적인 부분)해야 하고 액체의 성질(물리적인 부분)을 띄고 있어야 한다. 그렇다면 게임에서는 이러한 성질을 가지고 있는 물을 표현하기 위해 어떤방식을 사용하는가??? 아주 기본적인 방식부터 천천히 올라가 보자. 1. 프로그래머가 사용가능한 셰이더..

2012. 12. 6. 10:21

BRDF (Bidrectional Reflectance Distributing Function)

BSDF (Bidrectional ScatteringDistribution Function, 양반향 산란 분포 함수) - 우리가 일반적으로 사용하는 shading model들은 BxDF라는 함수들을 특수화한 model들 이다. BSDF는 빛이 어떤 물체에 부딪쳤을 때 얼마나 많은 빛이 반사되는가를 나타낸다. BSDF는 반사현상을 위한 Reflected 요소와 투과현상을 위한 Transmitted 요소로 나뉘며 이를 각각 BRDF(B Reflectance D F, 양반향 반사율 분포 함수)과 BTDF(B Transmittance D F 양반향 투과율 분포 함수)라고 한다. 즉, BSDF가 BRDF와 BTDF의 상위집합이다. BRDF는 불투명한 표면에서 빛이 반사하는 방식을 정의하는 4차 함수이며 BSSRD..

2012. 9. 23. 17:58

Water 만들기.

위의 사진은 Ogre의 Ocean 샘플이다. 가장 첫 시작은 이 샘플을 나도 구현해 보자로 시작되었다. 구현은 OpenglES 2.0을 기준으로 한다. 아래 파일은 Ogre에 들어있는 OpenglES용 셰이더 파일이다. 아래 링크는 Ogre의 Ocean 데모를 CG로 분석한 아티클 이다. http://starlike.cafe24.com/moniwiki/wiki.php/OgreOceanDemoAnalysis?action=show 아래 링크는 Ogre의 Ocean 데모를 hlsl로 분석한 아티클 이다. http://rosagigantea.tistory.com/334 지금 내가 하려는 것은 unreal 엔진에 OpenglES 버전으로 셰이더를 만들어 넣는것이다. 좌표계를 잘 알아야 한다. 이것땜에 몇일동안 삽..

inverse 함수

es에서 inverse함수를 잘 썻는데 아이패드에 넣으려니 안된다...이건 무슨..헐.. 참고 : http://www.codeshade.com/talk/index.php?topic=85.0 그래서 아주 간단한 한줄이 100줄이 넘어 버렸다. mat4 m = LocalToWorld; #define MAT(m,r,c) (m)[c][r] #define m11 MAT(m,0,0) #define m12 MAT(m,0,1) #define m13 MAT(m,0,2) #define m14 MAT(m,0,3) #define m21 MAT(m,1,0) #define m22 MAT(m,1,1) #define m23 MAT(m,1,2) #define m24 MAT(m,1,3) #define m31 MAT(m,2,0) #def..

OPENGL ES 문법

지정자 1. varying lowp vec4 DestinationColor; : 저정밀도(lowp) varying 변수, 10비트 부동 소수점 2. varying mediump vec2 TextureCoordOut; : 중정밀도(mediump) varying 변수, 16비트 부동 소수점 4. varying highp vec3 Licting; : 고정밀도(highp) varying 변수, 32비트 부동 소수점 4. uniform sampler2D Sampler; : uniform 형의 샘플러(Sampler) 변수. 이 변수는 텍셀 색상을 가져올 텍스처 레벨을 나타낸다. 5. uniform : 모든 uniform 변수는 기본값이 0. vs에서 read만 가능, fs에서 read만 가능. 함수 1. textu..

GLSL에서 사용하는 수식자, 식별자

저장소 수식자. 수식자 vs의 read여부 vs의 write여부 fs의 read여부 fs의 write여부 default O O O O const O O O O attribute O X X X uniform O X O X varying X O O X 정밀도 식별자 식별자 내부형 범위 사용 highp 32비트 부동소수점 [-9.999999x10의96승, +9.999999x10의96승] 색상, 법선벡터 mediump 16비트 부동소수점 [-65520, +65520] 텍스처 좌표 lowp 10비트 부동소수점 [-2, +2] 정점 위치, 행렬 그냥..머 대충 이렇ㄷㅏ...ㄷㄷ. Uniform Application에서 OpenGL ES API를 통해 Shader로 전달되는 읽기 전용 값을 저장하는 변수. Unifo..

factory function (팩토리 함수)

새로 생성된 파생 클래스 객체에 대한 기본 클래스 포인터를 반환하는 함수. class TimeKeeper { public: TimeKeeper(void); virtual ~TimeKeeper(void); }; // 시간 계산이 어떻게 되는지 몰라도 시간 기록을 유지하기 위한 클래스들. class AtomicClock : public TimeKeeper { public: AtomicClock(void) { cout

2012. 2. 27. 11:10

감마 보정 (gamma correction)

감마 보정 http://ko.wikipedia.org/wiki/%EA%B0%90%EB%A7%88_%EB%B3%B4%EC%A0%95 감마 보정 : 비선형 전달 함수를 사용해 빛의 강도신호를 비선형적으로 변형하는 것. 감마 조정 : 디스플레이 등의 특성에 따라 감마 값을 미세하게 조정하는 것. 감마 보정의 목적 : 인간의 시각이 밝기에 대해 비선형적으로 반응하기 때문에 최적의 화질을 보여주기 위해선 비선형적으로 데이터를 인코딩 하여 어두운 부분을 더 자세히 기록해야 한다. 감마 보정(gamma correction), 감마 인코딩(gamma encoding)의 이해 http://shotgunlee.egloos.com/10607756 자극 사이의 절대적인 차이가 아닌, 자극 사이의 비율이 중요하다. 어두운 부분..