분류 전체보기468 엄격함 속의 자비 (그릿 서평) 엄격함 속의 자비에 대해 배웠다. 이것은 남에게 뿐만이 아니라 자기 자신에게 동일하게 적용된다고 생각한다. 내가 목표를 달성할 수 있도록 어떻게 스스로를 도울 수 있을까? 그것은 목표를 달성하기 위해, 꾸준히 노력하도록 요구하는 엄격함이 있어야한다. 하지만 동시에 그 경험을 어떻게 하면 즐겁게 할 수 있을까 고민하는, 스스로를 위한 다정함이 있어야한다. 이것은 내가 대학생때 하던 고민과 비슷하다고 느꼈다. 스스로를 몰아붙이는 방식으로 공부하던 중, 과연 내가 가장 친한 친구에게도 이런 방식으로 공부하라고 강요할까? 고민해보았다. 전혀 그렇지 않았다. 그런데 왜 나에게는 스스로 엄격하게 하지? 하는 물음을 하게 되었다. 그 이후로 공부를 하되, 공부를 더 즐거운 경험이 되도록 방식을 바꾸었다. 그러자 행복.. 2023. 5. 19. [RSL] Part2 : Trigonometry, Vector Math (123p ~ 134p) Trigonometry 수학의 난이도를 한 단계 올려보자. 삼각함수는 어려울 수 있지만, 기억해야 할 공식과 성질은 손가락에 꼽을 정도로 적다. 나머지는 삼각함수 책이나 웹사이트에서 언제든 찾아보면 된다. 삼각함수는 모두 삼각형과 관련이 있다. 따라서 삼각형의 중요한 성질들을 살펴보자. 삼각형은 세 개의 변으로 이루어져있다. 변들이 서로 만나는 부분에는 각도가 있다. 삼각형의 각도의 합은 항상 180도, 혹은 라디안으로 표현하면 pi / 2 이다. 삼각형은 많은 종류가 있지만, 컴퓨터 그래픽스의 공부에서 가장 흔한 것은 직각삼각형이다. 직각삼각형은 한 개의 90도 각을 가지고 있으며, 다른 두 각은 90도를 합친 값이 된다. 삼각형의 가장 긴 변은 (언제나 90도 각도의 맞은편에 위치함) 빗변(hypot.. 2023. 5. 16. [RSL] Part2 : Useful Operations (105p ~ 119p) 수학은 추상적이고 어렵고 지루하다고 생각할 수 있다. 하지만 훌륭한 쉐이더 TD가 되기 위해서는 꼭 필요하다. 하지만 걱정하지 마라. 인간 계산기가 되지 않아도 된다. 오히려 계산기를 사용하는 것이 많은 도움이 된다. 앞으로 다룰 개념과 이론은 어려울 수 있지만, 우리는 수학자가 아니다. 따라서 이론이 왜 작동하는지나 수학적 증명 등을 걱정할 필요는 없다. 우리가 해야 할 일은 연산과 속성을 배우고 필요할 때 적용하는 것 뿐이다. 몇 가지 연산에 익숙해지려면 연습이 필요할 수 있다. 하지만 풀어내지 못해 좌절하진 마라. 쉐이더 TD로서 일상적으로 사용하는 수학의 양은 많지 않다. 익숙해져야 할 연산과 속성은 매우 제한적이다. 쉐이더 TD로서 가치를 크게 높일 수 있는 수학적 연구들도 많이 있지만, 그것은.. 2023. 5. 10. [RSL] Part1 : Your First Shader (66p ~ 91p) Your First Shader : "Hello World Shader" 첫 번째 셰이더를 작성해보자. RenderMan 셰이딩은 프로그래밍 언어인 RSL을 사용한다. 일반적으로 프로그래밍 언어를 소개할 때 사용하는 "hello world" 프로그램을 작성하자. 우리의 경우 "constant" 셰이더로 알려진 것을 작성할 것이다. 각 표면의 모든 점에 단일 값이 지정되어, 장면의 모든 조명을 완전히 무시한다. 이것은 쓸모없는 셰이더처럼 보일 수 있지만, 씬 디버깅 및 합성 매트를 만드는 데 유용하다. 다음과 같이 입력하라. surface helloWorld() { Oi = Os; Ci = Oi * Cs; } 파일을 helloWorld.sl로 저장한다. 셰이더의 첫 번째 줄은 이 셰이더가 표면 유형임을 선.. 2023. 5. 8. [GLSL] 13 - Fractal Brownian Motion 노이즈의 근본인, 파동(wave)과 파동의 성질을 살펴보자. 파동의 두 가지 중요한 특성은 진폭과 주파수이다. 간단한 선형(1차원) 파동의 방정식은 다음과 같다. float amplitude = 1.; float frequency = 1.; y = amplitude * sin(x * frequency); 파동의 또 다른 특성은 합산할 수 있다는 것이다. ( 두 개 이상의 파동을 합침) 이는 공식적으로 superposition(중첩)이라고 불린다. // 위 이미지 참고링크 https://www.acs.psu.edu/drussell/demos/superposition/superposition.html // 예제 진폭과 주파수가 다른 파동을 더하면 모양이 어떻게 되는지 주목하라. float amplitude .. 2023. 5. 4. [GLSL] 12 - Cellular Noise 펄린의 노이즈가 나온 지 16년 후이자, 심플렉스 노이즈가 나오기 5년 전인 1996년, 스티븐 월리는 "셀룰러 텍스처 베이스 함수"라는 논문을 썼다. 이 기법의 원리를 이해하려면 반복문에 대해 알아야한다. GLSL에서 for 루프에는 단점이 있다. 조건식의 숫자가 상수(const)여야 한다는 점이다. 따라서 동적 루프는 사용할 수 없다. 반복 횟수를 고정해야한다. 예제를 보자. Points for a distance field 셀룰러 노이즈는 거리 필드 기반으로 계산한다. 특정한 점으로부터의 가장 가까운 지점까지의 거리를 사용하는 것이다. 예를 들어, 4개의 점으로 구성된 거리 필드를 만들어보자. 각 픽셀이 가장 가까운 점까지의 거리를 계산해야한다. 즉, 점 개수만큼 반복하여 현재 픽셀까지의 거리를 계.. 2023. 5. 3. [C++] 챕터 11 - 포인터 : 정보에 대한 정보 // 11-1 : 변수의 주소 #include using namespace std; int main() { // 변수 정의 char c = 'B'; int i = 19; float f = 4.5f; // 주소 출력 cout 2023. 4. 27. [C++] 챕터 10 - 구조체 : 다양한 타입의 정보를 한 곳에 모으는 법 // 10-1 : 구조체의 정의 #include using namespace std; // 구조체 정의 struct StudentInfo { char bloodType; // 혈액형 int stdNumber; // 학번 float grade; // 평점 }; int main() { // 구조체 타입의 '변수' 정의 StudentInfo si1; StudentInfo si2; return 0; } /* --- 결과 --- ------ 구조체의 가장 중요한 목표는 여러가지 변수를 그룹처럼 만드는 것이다. main함수 안에서도 정의할 수 있다. 그러나 밖에서 정의하는 것이 일반적이다. 구조체 정의는 붕어빵 틀이다. 구조체 변수 정의는 붕어빵이다. 구조체 정의시 별도 메모리 공간이 할당되지 않는다. 구조체 '변.. 2023. 4. 27. [GLSL] 11 - Noise 현실 세계 무작위성을 가지고 있지만, 랜덤과는 다르다. 이 다양성을 어떻게 표현할까? 1980년대 초 영화 "트론"을 위해 보다 사실적인 텍스처를 생성해 달라는 의뢰를 받은 켄 펄린은 이 문제를 해결했다. 이에 대한 해답으로 노이즈 알고리즘을 고안해냈다. 다음은 고전적인 펄린 노이즈 알고리즘은 아니지만, 노이즈 생성 방법을 이해하기 위한 기초 예제이다. float i = floor(x); // integer float f = fract(x); // fraction y = rand(i); //rand() is described in the previous chapter y = mix(rand(i), rand(i + 1.0), f); // 선형 보간법 y = mix(rand(i), rand(i + 1.0),.. 2023. 4. 26. 이전 1 ··· 43 44 45 46 47 48 49 ··· 52 다음