
Korean: 
안녕하세요. 저는 Carrie Anne 입니다.
컴퓨터 과학 특강에 오신 걸 환영합니다!.
지난 5개의 강의에서 우리는 텍스트 기반의 텔레타이프 인터페이스에서 픽셀화된 비트맵 까지 작업해 왔습니다
지난 강의에서, 우리는 그래픽 유저 인터페이스와 
그 모든 매력들을 다뤘습니다.
지난 강의에서, 우리는 그래픽 유저 인터페이스와 
그 모든 매력들을 다뤘습니다.
지금까지의 모든 예시는 2D입니다. 
그러나 당연하게 우리는 3D세계에 살고 있고,
저는 3 차원 소녀입니다!
그래서 오늘, 우리는 몇몇 3D 컴퓨터
그래픽의 근본적인 방법과
어떻게 그것을 2D 화면에 표현할수 있는 지에
대해 얘기해 볼 겁니다.
 
24강에서 논의했듯이 A와 B와 같은 두 점 사이에
선을 그리는 함수를 작성할 수 있습니다.
점 A,B의 x, y 좌표를 조작하면 선을 조정 할 수 있습니다.
3D 그래픽에서 점들은 두개의 좌표가 아니라 
3 개를 가집니다. - X, Y 그리고 Z (Zee라고도 하지만)
저는 "Zet"이라고 하겠습니다.

English: 
Hi, I’m Carrie Anne, and welcome to CrashCourse
Computer Science!
Over the past five episodes, we’ve worked
up from text-based teletype interfaces to
pixelated bitmapped graphics. Then, last episode,
we covered Graphical User Interfaces and all
their “Ooey Gooey” richness.
All of these examples have been 2D. But of
course “we are living in a 3D world, and
I’m a 3 dimensional girl!”
So today, we're going to talk about some fundamental
methods in 3D computer graphics and how you
render them onto a 2D screen.
INTRO
As we discussed in episode 24 we can write functions that draw a line between any two points like A and B.
By manipulating the X and Y coordinates of
points A and B, we can manipulate the line.
In 3D graphics, points have not just two coordinates,
but three -- X, Y and Z. Or “zee” but
I’m going to say “zed”.

Korean: 
물론 2D인 컴퓨터 화면에서 X, Y, Z 좌표들은 
존재하지 않습니다.
그래서 그래픽 알고리즘들은 3차원 좌표를 2차원 평면에 
"평평하게" 만들 책임이 있습니다.
이 과정은 3차원 투영이라고 알려져 있습니다.
모든 점들이 3차원에서 2차원으로 변환되면, 
일반적인 2D 선 그리기 기능으로 점들을 연결합니다.
말 그대로, 이것을 와이어 프레임 렌더링이라고 합니다.
젓가락으로 사각형을 만들고
그것에 손전등을 비추는 것을 상상해 보십시오.
벽에 생긴 그림자의 투영도는 평면입니다.
만약 큐브를 회전 시키면,
이 그림자가 평면 투영 일지라도, 여러분은 그것이 
3차원의 물체라는 것을 알 수 있습니다.
이 3D에서 2D로의 변환은 많은 수학과 적은 선들로 
컴퓨터가 정확하게 하고 있습니다.
이 3D에서 2D로의 변환은 많은 수학과 적은 선들로 
컴퓨터가 정확하게 하고 있습니다.
3D투영에는 여러 가지 유형이 있습니다.
지금 보고 있는 것은 정사영이라고 합니다.
예를 들어, 큐브의 평행한 변이 
투영에서 평행하게 나타납니다.
그렇지만 실제 3D 세계에서 평행선은 
관찰자로부터 멀어 질수록 한 점에 수렴합니다.
마치 지평선에 뻗어있는 길처럼요.
이러한 유형의 3D투영을 투시 투영이라고 부릅니다.

English: 
Of course, we don’t have X/Y/Z coordinates
on a 2D computer screen, so graphics algorithms
are responsible for “flattening” 3D coordinates
onto a 2D plane.
This process is known as 3D Projection. Once
all of the points have been converted from
3D to 2D, we can use the regular 2D line drawing
function to connect the dots… literally.
This is called Wireframe Rendering.
Imagine building a cube out of chopsticks,
and shining a flashlight on it. The shadow
it casts onto your wall – its projection
– is flat. If you rotate the cube around,
you can see it’s a 3D object, even though
it’s a flat projection.
This transformation from 3D to 2D is exactly
what your computer is doing, just with a lot
more math… and less chopsticks.
There are several types of 3D Projection.
What you’re seeing right now is an Orthographic
Projection, where, for example, the parallel
sides in the cube appear as parallel in the
projection.
In the real 3D world through, parallel lines
converge as they get further from the viewer,
like a road going to the horizon. This type
of 3D projection is called Perspective Projection.

Korean: 
같은 과정이지만 단지 다른 수학을 사용합니다.
때때로 여러분이 투시투영을 원하거나 원치 않을 때
선택은 개발자에게 달렸습니다.
큐브같이 간단한 모양은 직선으로 쉽게 정의되어 집니다.
그러나 더 복잡한 모양을 나타내기 위해, 3D그래픽에선 
폴리곤이라고 불리는 삼각형들이 더 좋습니다.
이 폴리곤들로 만들어진 아름다운 주전자를 보십시오.
이와 같은 폴리곤의 무리들을 메쉬(Mesh)라고 합니다.
메쉬의 밀도가 높을수록 곡선이 매끄러워지고
디테일은 더 세밀해집니다.
그러나 폴리곤의 수를 늘리는 것은
컴퓨터에게 더 많은 부하를 주는 것을 의미합니다.
게임 디자이너들은 모형 충실도와 폴리곤 갯수 사이에서 조심스럽게 균형을 맞춰야 합니다.
이유는 수가 너무 높아지면, 애니메이션의 프레임속도가
사용자가 부드럽게 인식하는 것보다 떨어지기 때문이죠.
이러한 이유로, 메쉬 단순화 알고리즘이 존재합니다.
사각형이나 폴리곤 혹은 다른 복잡한 모양이 아니고 
삼각형이 사용 된 이유는 단순하기 때문입니다.
공간의 3점이 분명하게 평면을 명확하게 정의합니다.
만약 여러분이 저에게 3D 공간에서 점 3개를 준다면, 
점들을 통해 평면을 그릴수 있습니다.
딱 하나의 정답만이 있습니다.
이것은 4개 이상의 점이 있는 도형에 
대해서는 보장할 수 없습니다.

English: 
It’s the same process, just with different
math. Sometimes you want perspective and sometimes
you don’t -- the choice is up to the developer.
Simple shapes, like cubes, are easily defined
by straight lines. But for more complex shapes,
triangles are better -- what are called polygons
in 3D graphics.
Look at this beautiful teapot made out of
polygons. A collection of polygons like this
is a mesh.
The denser the mesh, the smoother the curves
and the finer the details. But, that also
increases the polygon count, which means more
work for the computer.
Game designers have to carefully balance model
fidelity vs. polygon count, because if the
count goes too high, the framerate of an animation
drops below what users perceive as smooth.
For this reason, there are algorithms for
simplifying meshes.
The reason triangles are used, and not squares,
or polygons, or some other more complex shape
is simplicity: three points in space unambiguously
define a plane.
If you give me three points in a 3D space,
I can draw a plane through it - there is only
one.. single.. answer.
This isn’t guaranteed to be true for shapes
with four or more points. Also, two points

Korean: 
또한, 2개의 점은 평면을 정의하는데 충분하지 않습니다.
그래서 3개의 점이 가장 완벽한 최솟값입니다.
삼각형이 승리네요!
와이어 프레임 렌더링은 멋지고 일종의 복고풍이지만
물론 3D 그래픽도 채울 수 있습니다.
와이어 프레임 렌더링은 멋지고 일종의 복고풍이지만
물론 3D 그래픽도 채울 수 있습니다.
이를 하기 위한 스캔 라인 랜더링이라 불리는 고전적인 
알고리즘이 1967년에 유타 대학에서 처음 개발됐습니다.
간단히 예를 들자면, 
하나의 폴리곤만 고려해 봅시다.
여기서 우리의 일은 이 폴리곤이 어떻게 컴퓨터 화면에 
채워진 픽셀로 변환하는지 알아내는 것 입니다.
그러려면, 먼저 채울 픽셀의 격자를 오버레이 합니다.
스캔 라인 알고리즘은 폴리곤을 만드는 세 점을 읽고 
Y좌표의 최대, 최솟값을 찾는 것부터 시작합니다.
이것은 두 점 사이의 줄만 고려합니다.
그런 다음, 알고리즘은 한번에 한 줄씩 작업합니다.
각 행에서 행의 중심을 통과하는 선이 
폴리곤의 모서리와 교차하는 위치를 계산합니다.
폴리곤들이 삼각형이기 때문에 만약 한 선분을 
가로지른다면 다른 한 선분도 지나가게 됩니다.
장담합니다!
스캔 라인 알고리즘은 두 교차점 사이의
픽셀을 채우는 것입니다.
이게 어떻게 작동하는지 봅시다.
우리가 바라보고 있는 첫 번째 가로줄의 교차점은 
여기 화면에 가리키는 점들입니다.

English: 
aren’t enough to define a plane, only a
line, so three is the perfect and minimal
number. Triangles for the win!
Wireframe rendering is cool and all – sorta
retro – but of course 3D graphics can also
be filled.
The classic algorithm for doing this is called
Scanline Rendering, first developed in 1967
at the University of Utah. For a simple example,
let’s consider just one polygon.
Our job here is to figure out how this polygon
translates to filled pixels on a computer
screen, so let’s first overlay a grid of
pixels to fill.
The scanline algorithm starts by reading the
three points that make up the polygon, and
finding the lowest and highest Y values. It
will only consider rows between these two
points.
Then, the algorithm works down one row at
a time. In each row, it calculates where a
line – running through the center of a row
– intersects with the side of the polygon.
Because polygons are triangles, if you intersect
one line, you have to intersect with another.
It’s guaranteed! The job of the scanline
algorithm is to fill in the pixels between
the two intersections. Let’s see how this
works.
On the first row we look at we intersect here
and here.

Korean: 
그런 다음 알고리즘은 두 교점 사이의
모든 픽셀에 색을 칠합니다.
그리고 이 과정이 한줄, 한줄 계속됩니다.
이게 스캔 라인 랜더링이라고 불리는 이유입니다.
폴리곤의 바닥에 도달하면 알고리즘이 끝납니다.
컴퓨터가 폴리곤을 채우는 속도를 필레이트라고 합니다.
인정하건데, 꽤 못생기게 채워진 폴리곤이죠.
그것은 "계단현상 (jaggies)"으로 알려진 
거친 모서리를 지니고 있습니다.
작은 픽셀을 사용할 때에  현상은 덜 나타나지만
그럼에도 불구하고,
여러분은 항상 게임에서, 특히 저전력 플랫폼에서 
이것을 봤을 것입니다.
이 현상을 부드럽게 하는 한 가지 방법은
앤티 앨리어싱입니다.
같은 색으로 폴리곤의 픽셀 채우기 대신
폴리곤이 각각의 픽셀을 얼마나 잘랐는지에 따라
색상을 조정할 수 있습니다.
픽셀이 완전히 폴리곤 안에 있는 경우에는,
그것은 완전히 색이 칠해질 것입니다.
그러나 폴리곤이 픽셀을 살짝 스치는 경우, 
그것은 더 밝은 음영을 얻습니다.
이 가장자리 페더링은 눈에 훨씬 보기 좋습니다.
앤티엘리어싱은 2D 그래픽을 포함하여 
글꼴 및 아이콘과 같은 곳에 널리 사용됩니다.
만약 모니터에 더, 더, 더 가까이 가면
브라우저의 모든 글꼴이 안티얼리어싱 된 것을 볼 수 
있습니다. 정말 부드럽네요!

English: 
The algorithm then colors in all pixels between
those two intersections.
And this just continues, row by row, which
is why it’s called Scan... Line... Rendering.
When we hit the bottom of the polygon, we’re
done. The rate at which a computer fills in
polygons is called the fillrate.
Admittedly, this is a pretty ugly filled polygon.
It has what are known as “Jaggies” -- those
rough edges. This effect is less pronounced
when using smaller pixels. But nonetheless,
you see these in games all the time, especially
on lower powered platforms.
One method to soften this effect is Antialiasing.
Instead of filling pixels in a polygon with
the same color, we can adjust the color based
on how much the polygon cuts through each
pixel.
If a pixel is entirely inside of a polygon,
it gets fully colored. But if the polygon
only grazes a pixel, it’ll get a lighter
shade. This feathering of the edges is much
more pleasant to the eyes.
Antialiasing is used all over the place, including
in 2D graphics, like fonts and icons. If you
lean in real close to your monitor.. Closer…
closer…. Closer!
You’ll see all the fonts in your browser
are Antialiased. So smooth!

Korean: 
3D 장면에의 후면, 정면 부근, 거의 모든 부분에서
부분 객체인 폴리곤을 볼 수 있습니다.
그중에 일부만 보여지는데, 왜냐하면 어떤 물체는 
다른 물체 뒤에 감추어져 있기 때문입니다.
이를 폐색이라고 합니다.
이를 처리하는 가장 간단한 방법은 정렬 알고리즘입니다.
그 장면에서 가장 먼 곳에서부터 가장 가까운 곳까지
순서대로 렌더링해 모두 정렬합니다.
이를 화가 알고리즘이라고 합니다.
화가가 배경으로 시작해서 전경 요소까지 점점 나아가며 
작업하는 것과 비슷하기 때문입니다.
화가가 배경으로 시작해서 전경 요소까지 점점 나아가며 
작업하는 것과 비슷하기 때문입니다.
이 세 개의 폴리곤이 겹치는 예제 장면을 가정해 봅시다.
이해하기 쉽도록 하기 위해 
다각형의 색을 다르게 색칠합니다.
또한 단순함을 위해, 우리는 폴리곤들이 
화면에 평행하다고 가정합니다.
그러나 실제 게임과 같은 프로그램에서는 
폴리곤이 3차원 공간에서 기울어져 있을 수도 있습니다.
3 개의 폴리곤 A, B, C의 각 거리는 20, 12 , 14입니다.
화가 알고리즘의 첫번째는 모든 폴리곤을 가장 멀리 있는
것 부터 가까운 것으로 정렬하는 것 입니다.
화가 알고리즘의 첫번째는 모든 폴리곤을 가장 멀리 있는
것 부터 가까운 것으로 정렬하는 것 입니다.
이제 이것들이 순서대로 있기 때문에, 스캔라인 랜더링을 사용해 한 번에 하나씩 폴리곤을 채웁니다.
가장 멀리 떨어져 있는 Polygon A로 시작합니다.

English: 
In a 3D scene, there are polygons that are
part objects in the back, near the front,
and just about everywhere. Only some are visible,
because some objects are hidden behind other
objects in the scene -- what’s called occlusion.
The most straightforward way to handle this
is to use a sort algorithm, and arrange all
the polygons in the scene from farthest to
nearest, then render them in that order.
This is called the Painter's Algorithm, because
painters also have to start with the background,
and then increasingly work up to foreground
elements.
Consider this example scene with three overlapping
polygons.
To make things easier to follow, we’re going
to color the polygons differently. Also for
simplicity, we’ll assume these polygons
are all parallel to the screen, but in a real
program, like a game, the polygons can be
tilted in 3D space.
Our three polygons, A B and C… are at distance
20, 12 and 14.
The first thing the Painter’s Algorithm
does is sort all the polygons, from farthest
to nearest.
Now that they’re in order, we can use scanline
rendering to fill each polygon, one at a time.
We start with Polygon A, the farthest one
away.

Korean: 
그리고 그 다음으로 먼 폴리곤, 이 경우에는 C에
스캔라인 렌더링을 반복합니다.
그리고 폴리곤 B에 대해 이 작업을 다시 반복합니다.
이제 모두 끝났습니다. 순서는 정확합니다.
가까이 있는 폴리곤들은 앞에 있습니다.
폐색을 다루는 또 다른 방법은 Z-버퍼링이라고 합니다.
이전과 같은 결과를 출력 하지만 
아까와는 다른 알고리즘입니다.
폴리곤들이 정렬되기 전 예제로 돌아가 봅시다.
왜냐하면 이 알고리즘은 어떤 폴리곤도 
정렬 할 필요가 없고 이게 더 빠릅니다.
즉, Z-버퍼링은 장면에서 모든 픽셀에 대해 
폴리곤까지 가장 가까운 거리를 추적합니다.
메모리의 값을 나타내는 행렬인 Z-버퍼를 유지함으로써 
이 작업을 수행합니다.
처음에는 모든 픽셀이 무한대로 초기화됩니다.
그런 다음 Z-버퍼링은 리스트 안의 첫 번째 폴리곤으로 
시작하는데 이 경우에는 A입니다.
스캔 라인 알고리즘과 동일한 로직을 사용하지만
픽셀 단위로 색상을 지정하는 대신,
그것은 폴리곤의 거리와 Z-버퍼 안에 
기록된 거리를 검사합니다.
두 값 중 낮은 값을 기록합니다. 
거리가 20인 폴리곤 A가 무한대에 대항하여 이깁니다.
두 값 중 낮은 값을 기록합니다. 
거리가 20인 폴리곤 A가 무한대에 대항하여 이깁니다.

English: 
Then we repeat the process for the next farthest
polygon, in this case, C.
And then we repeat this again, for Polygon
B.
Now we’re all done, and you can see the
ordering is correct. The polygons that are
closer, are in front!
An alternative method for handling occlusion
is called Z-Buffering. It achieves the same
output as before, but with a different algorithm.
Let’s go back to our previous example, before
it was sorted. That’s because this algorithm
doesn’t need to sort any polygons, which
makes it faster.
In short, Z-buffering keeps track of the closest
distance to a polygon for every pixel in the
scene. It does this by maintaining a Z-Buffer,
which is just a matrix of values that sits
in memory.
At first, every pixel is initialized to infinity.
Then Z-buffering starts with the first polygon
in its list. In this case, that’s A.
It follows the same logic as the scanline
algorithm, but instead of coloring in pixels,
it checks the distance of the polygon versus
what’s recorded in its Z-Buffer.
It records the lower of the two values. For
our Polygon A, with a distance of 20, it wins
against infinity every time.

English: 
When it’s done with Polygon A, it moves
on to the next polygon in its list, and the
same thing happens.
Now, because we didn’t sort the polygons,
it’s not always the case that later polygons
overwrite high values. In the case of Polygon
C, only some of the values in the Z-buffer
get new minimum distances.
This completed Z-buffer is used in conjunction
with a fancier version of scanline rendering
that not only tests for line intersection,
but also does a lookup to see if that pixel
will even be visible in the final scene. If
it’s not, the algorithm skips it and moves
on.
An interesting problem arises when two polygons
have the same distance, like if Polygon A
and B are both at a distance of 20. Which
one do you draw on top?
Polygons are constantly being shuffled around
in memory and changing their access order.
Plus, rounding errors are inherent in floating
point computations. So, which one gets drawn
on top is often unpredictable.
The result is a flickering effect called Z-Fighting,
which if you’ve played 3D games, you’ve
no doubt encountered.
Speaking of glitches, another common optimization
in 3D graphics is called Back-Face Culling.

Korean: 
폴리곤 A가 끝나면 목록에 있는 
다음 폴리곤으로 넘어가 같은 일을 반복합니다.
폴리곤 A가 끝나면 목록에 있는 
다음 폴리곤으로 넘어가 같은 일을 반복합니다.
폴리곤을 정렬하지 않았기 때문에, 이후의 폴리곤이 항상 높은 값을 덮어 쓰는 것은 아닙니다.
폴리곤 C의 경우에는, 
Z-버퍼의 값 중 일부만 최소 거리를 얻습니다.
폴리곤 C의 경우에는, 
Z-버퍼의 값 중 일부만 최소 거리를 얻습니다.
완성된 Z-버퍼는 스캔 라인 렌더링의 
멋진 버전과 함께 사용되어
라인 교차점을 테스트 할 뿐만 아니라, 그 픽셀이 
최종 장면에서 보이는지 확인하기 위한 룩업도 합니다.
만약 보여지지 않는다면, 알고리즘은 그것을 건너 뛰고 
다음으로 진행한 것입니다.
흥미로운 문제는 두 개의 폴리곤이 
같은 거리에 있는 상황입니다.
A, B 둘다 거리가 20인데, 
어느 것이 위에 올라와야 할까요?
폴리곤은 끊임없이 메모리 안에서 섞여 지고 
그것들의 액세스 순서를 변경하고 있습니다.
또한 반올림 오류는 부동 소수점 연산에 
내재되어 있습니다.
그래서 어느 것이 위에 그려지는지 
종종 예측할 수 없습니다.
그 결과는 Z-Fighting 이라 불리는 깜빡이는 현상입니다. 여러분이 3D게임을 할때 한 번쯤 겪어봤을 법 한데,
글리치에 대해 말하자면, 3D 그래픽의 또 다른 
일반적인 최적화를 Back-Face Culling 이라고 합니다.
글리치에 대해 말하자면, 3D 그래픽의 또 다른 
일반적인 최적화를 Back-Face Culling 이라고 합니다.

English: 
If you think about it, a triangle has two
sides, a front and a back. With something
like the head of an avatar, or the ground
in a game, you should only ever see one side
-- the side facing outwards.
So to save processing time, the back-side
of polygons are often ignored in the rendering
pipeline, which cuts the number of polygon
faces to consider in half.
This is great, except when there’s a bug
that lets you get inside of those objects,
and look outwards. Then the avatar head or
ground becomes invisible.
Moving on. We need to talk about lighting
-- also known as shading -- because if it’s
a 3D scene, the lighting should vary over
the surface of objects.
Let’s go back to our teapot mesh.
With scanline rendering coloring in all the
polygons, our teapot looks like this. Not
very 3D.
So, let’s add some lighting to enhance the
realism!
As an example, we’ll pick 3 polygons from
different parts of our teapot.
Unlike our previous examples, we’re now
going to consider how these polygons are oriented
in 3D space -- they’re no longer parallel
to the screen, but rather tilted in different
3D directions.
The direction they face is called the Surface
Normal, and we can visualize that direction

Korean: 
생각해 보면, 삼각형은 앞뒤로 두 면을 가지고 있습니다.
아바타의 머리 또는 게임 속의 그라운드는
한 면만 볼 수 있습니다. - 바깥을 향한 쪽이죠.
아바타의 머리 또는 게임 속의 바닥은
한 면만 볼 수 있습니다. - 바깥을 향한 쪽이죠.
따라서 처리 시간을 절약하기 위해 폴리곤의 뒷면은 
종종 랜더링 파이프 라인에서 무시됩니다.
그리고 이것은 고려해야 할 폴리곤 면의 수를
반으로 줄여줍니다.
여러분을 그 객체 속으로 들어가게 하는 
버그가 있을 때를 제외하고 이것은 굉장한 것입니다.
그러면 아바타의 머리나 바닥이 보이지 않게 됩니다.
넘어가서, 우리는 쉐이딩(shading)이라고 알려진 
조명에 대해 이야기 할 필요가 있습니다.
왜냐하면 3D 에서 조명은 물체의 표면에 따라 
달라져야 하기 때문입니다.
우리의 주전자 메쉬로 돌아가 봅시다.
모든 폴리곤에서 스캔라인 랜더링 색칠을 하면
주전자는 이렇게 생겼습니다.
매우 3D 같아 보이지는 않습니다.
자, 현실성을 높이기 위해 몇몇의 조명을 추가해 봅시다.
예를 들어, 폴리곤의 3곳의 다른 부분을 선택할 것입니다.
이전 예와 달리 이제는 이 폴리곤들이 3D 공간에서 
어떻게 방향을 잡을 지 고려할 것입니다.
그들은 더 이상 화면에 평행이 아니고,
 다른 3D 방향으로 기울어져 있습니다.
그들이 마주하는 방향을 
표면 법선(Surface Normal)이라고 부르며,

English: 
with a little 3D arrow that’s perpendicular
to the polygon’s surface.
Now let’s add a light source.
Each polygon is going to be illuminated a
different amount. Some will appear brighter,
because their angle causes more light to be
reflected towards the viewer.
For example, the bottom-most polygon is tilted
downwards, away from the light source, which
means it’s going to be dark.
In a similar way, the rightmost polygon is
slightly facing away from the light, so it
will be partially illuminated.
And finally, there’s the upper-left polygon.
Its angle means that it will reflect light
from the light source towards our view.
So, it’ll appear bright.
If we do this for every polygon, our teapot
looks like this which is much more realistic!
This approach is called Flat Shading, and
it’s the most basic lighting algorithm.
Unfortunately, it also makes all those polygon
boundaries really noticeable and the mesh
doesn’t look smooth.
For this reason, more advanced lighting algorithms
were developed, such as Gouraud Shading and
Phong Shading. Instead of coloring in polygons
using just one colour, they vary the colour
across the surface in clever ways, which results
in much nicer output.

Korean: 
폴리곤 표면에 수직인 작은 3D 화살표로 
방향을 시각화할 수 있습니다.
이제 광원을 추가해 봅시다.
각 폴리곤은 다른 양으로 조명되어 
일부는 더 밝게 나타날 것입니다.
왜냐하면 그들의 각도는 보는 사람 쪽으로 더 많은 빛이
반사되게 하도록 하기 때문입니다.
예를 들어, 가장 아래쪽의 폴리곤은 광원에서 
멀리 떨어져 아래쪽으로 기울어져 있습니다.
이것은 어두운 색이 될거라는걸 의미합니다.
비슷한 방법으로, 가장 오른쪽의 폴리곤은
약간 멀리 떨어져 빛을 향하고 있으므로
부분적으로 조명 될 것입니다.
마지막으로, 왼쪽 위에 폴리곤이 있는데
그 각도는 빛을 광원으로부터 우리의 시선쪽으로
빛을 반사시킬 것임을 의미합니다.
그래서, 그것은 밝게 보일 것입니다.
모든 다각형에 대해 이렇게 하면, 
주전자는 훨씬 더 현실적으로 보이게 될 것입니다.
이 접근법을 플랫 쉐이딩(Flat Shading)이라 하고,
가장 기본적인 조명 알고리즘입니다.
불행히도 이 알고리즘은 모든 폴리곤의 경계들이 
눈에 띄도록 만들고 메쉬가 부드럽게 보이지 않습니다.
불행히도 이 알고리즘은 모든 폴리곤의 경계들이 
눈에 띄도록 만들고 메쉬가 부드럽게 보이지 않습니다.
이런 이유로, Gouraud Shading이나 Phong Shading과 
같은 더 발전한 조명 알고리즘이 개발되었습니다.
폴리곤을 하나의 색상만으로 색칠하는 대신에
표면 전체의 색상을 영리한 방법으로 변화시켜
더 좋은 결과를 얻을 수 있습니다.

Korean: 
우리는 또한 텍스쳐에 대해 언급할 필요가 있습니다.
이는 그래픽에서 느낌보다는 표면의 표정을 의미합니다.
우리는 또한 텍스쳐에 대해 언급할 필요가 있습니다.
이는 그래픽에서 느낌보다는 표면의 표정을 의미합니다.
조명과 마찬가지로, 멋진 효과가 있는
많은 알고리즘이 있습니다.
가장 간단한 방법은 텍스처 매핑입니다. 이 과정을 
시각화 하기 위해, 단일 폴리곤으로 돌아가 봅시다.
우리가 스캔라인 랜더링을 이용해서 이것을 채울 때,
메모리에 저장된 텍스처 이미지에 따라 
모든 픽셀에서 사용할 색상을 찾을 수 있습니다.
메모리에 저장된 텍스처 이미지에 따라 
모든 픽셀에서 사용할 색상을 찾을 수 있습니다.
이렇게 하려면, 폴리곤의 좌표와 텍스처의 좌표 사이에 
매핑(Mapping)이 필요합니다.
스캔 라인 랜더링이 채워야 하는
첫번째 픽셀로 가 봅시다.
텍스처링 알고리즘은 메모리에서 텍스처를 참조하여
해당 영역의 평균 색을 따라 폴리곤을 채웁니다.
이 과정은 폴리곤 안에 있는 모든 픽셀에서 반복합니다.
이게 바로 텍스처를 얻는 방법입니다.
이번 강의에서 얘기한 모든 기술을 결합하면 우리는 
엄청 멋지고 고풍스런 주전자를 얻을 수 있습니다.
이번 강의에서 얘기한 모든 기술을 결합하면 우리는 
엄청 멋지고 고풍스런 주전자를 얻을 수 있습니다.
그리고 이 주전자는 수백만 개의 폴리곤으로 구성된 
훨씬 더 큰 장면에 놓일  수 있습니다.
이러한 장면을 렌더링하는 것은 
상당한 계산량을 필요로 합니다.
허나 중요하게도, 그것은 수백만의 폴리곤에 걸쳐
반복적으로 수행되는 동일한 유형의 연산입니다.

English: 
We also need to talk about textures, which
in graphics refers to the look of a surface,
rather than its feel.
Like with lighting, there are many algorithms
with all sorts of fancy effects. The simplest
is texture mapping. To visualize this process,
let’s go back to our single polygon.
When we’re filling this in, using scanline
rendering, we can look up what color to use
at every pixel according to a texture image
saved in memory. To do this, we need a mapping
between the polygon’s coordinates and the
texture’s coordinates.
Let’s jump to the first pixel that scanline
rendering needs to fill in.
The texturing algorithm will consult the texture
in memory, take the average color from the
corresponding region, and fill the polygon
accordingly.
This process repeats for all pixels in the
polygon, and that’s how we get textures.
If you combine all the techniques we’ve
talked about this episode, you get a wonderfully
funky little teapot.
And this teapot can sit in an even bigger
scene, comprised of millions of polygons.
Rendering a scene like this takes a fair amount
of computation. But importantly, it’s the
same type of calculations being performed
over and over and over again for many millions

English: 
of polygons – scanline filling, antialiasing,
lighting, and texturing. However there are
a couple of ways to make this much faster!
First off, we can speed things up by having
special hardware with extra bells and whistles
just for these specific types of computations,
making them lightning fast. And secondly,
we can divide up a 3D scene into many smaller
parts, and then render all the pieces in parallel,
rather than sequentially.
CPU’s aren’t designed for this, so they
aren’t particularly fast. So, computer engineers
created special processors just for graphics
– a GPU, or Graphics Processing Unit.
These can be found on graphics cards inside
of your computer, along with RAM reserved
for graphics. This is where all the meshes
and textures live, allowing them to be accessed
super fast by many different cores of the
GPU all at once.
A modern graphics card, like a GeForce GTX
1080 TI, contains 3584 processing cores, offering
massive parallelization. It can process hundreds
of millions of polygons every second!

Korean: 
예를 들자면, 스캔라인 채우기, 안티앨리어싱, 조명 
그리고 텍스쳐링과 같은 연산들입니다.
그러나 이들을 훨씬 빠르게 만드는 몇 가지 방법이 있습니다.
우선, 특정 유형의 계산을 위한 여분의 벨과 호루라기를 가진 특별한 하드웨어를 갖춤으로써 속도를 높여
번개의 속도로 일을 처리할 수 있습니다.
둘째, 3D 장면을 여러 작은 부분으로 나누고 그것들을 
순차적으로 하기보다는 병렬로 랜더링할 수 있습니다.
둘째, 3D 장면을 여러 작은 부분으로 나누고 그것들을 
순차적으로 하기보다는 병렬로 랜더링할 수 있습니다.
CPU는 이를 위해 설계되지 않아서, 
특별히 빠르지 않습니다.
그래서 컴퓨터 기술자들은 그래픽 전용 프로세서를 
만들었습니다. - GPU 또는 그래픽 처리 장치.
GPU는 그래픽 카드 내부에서 찾 수 있습니다.
또한 그래픽을 위한 램이 예약되어 있습니다.
이는 모든 메시와 텍스처가 있는 곳이며 여러 개의 
다른 코어로 동시에 매우 빠르게 엑세스 할 수 있습니다.
이는 모든 메시와 텍스처가 있는 곳이며 여러 개의 
다른 코어로 동시에 매우 빠르게 엑세스 할 수 있습니다.
GeForce GTX 1080 TI와 같은 최신 그래픽 카드는 
3584개의 처리 코어를 가지고 있어서,
대규모 병렬처리가 가능합니다. 
매 초마다 수억개의 폴리곤을 처리할 수 있습니다.

Korean: 
자,  이것으로 3D 그래픽의 여정을 마치겠습니다.
다음주에 우리는 완전하게 주제를 바꿔서
그때 여러분에게 메시지할게요~
번역자 : Chris Yunbin Chang, Byongcheol Ko
오역 제보 : hw@yunbin.kr

English: 
Ok, that concludes our whistle stop tour of
3D graphics. Next week, we switch topics entirely.
I’ll ping you then.
