현재 카메라에 this.mesh
를 렌더링합니다. 기본적으로 메시의 모든 삼각형을 렌더링하지만, triangleStart
, count
인자를 주는 것으로 $[triangleStart, triangleStart+count)$ 범위의 삼각형들만 렌더링하도록 할 수 있습니다. this.boneVisible = true
라면, this.mesh.bones
또한 렌더링합니다.
Renderer
의 그래픽 파이프라인(Graphic pipeline)은 다음처럼 진행됩니다:
Mesh.getTriangle()
— Mesh.getTriangle() 함수를 통해 렌더링할 삼각형 Triangle 을 가져옵니다.
Material.vertexShader()
— 삼각형을 구성하는 세 정점 $\vec{vertex0}\to\vec{vertex1}\to\vec{vertex2}$ 에 정점 셰이더 Material.vertexShader() 를 적용합니다. 정점 셰이더 단계에서는 Deformer.deformPosition() Shader.objectToClipPos() 등을 적용하여, 스켈레탈 애니메이션(Skeletal animation) 적용 및 클립 좌표(clip coordinate)로 변환합니다.
Triangle.backface
— Material.backfaceCulling 이 true
라면, 삼각형이 뒤를 바라보고 있는지 검사합니다. Triangle.backface 를 통해 검사하며, 결과가 true
라면 삼각형을 그릴 필요가 없습니다. $(4) ⇒ (5)$ 단계를 무시하기에, 성능이 크게 향상됩니다.
Renderer.clipTriangle0()
— Material.usePerspective 가 true
라면, 원근투영을 사용한다는 의미이며, 현재 삼각형들의 정점은 클립 좌표(clip coordinate)라고 생각합니다. NDC 공간을 벗어나지 않도록 Renderer.clipTriangle0() 함수를 통해 삼각형 클리핑(triangle clipping)을 진행합니다.
Renderer.drawTriangle2D()
— Renderer.drawTriangle2D() 함수를 사용하여 삼각형을 픽셀 그래픽(pixel graphic)으로 변환하는 $Rasterization$ 단계를 수행합니다.
Material.fragmentShader()
— 픽셸 셰이더 Material.fragmentShader() 를 적용합니다. 픽셸 셰이더 단계에서는 Shader.tex2D() 등을 사용하여 최종 색상을 결정합니다.renderer.renderMesh()
renderer.renderMesh(triangleStart, count)
triangleStart
count
(none)