현재 카메라에 this.mesh 를 렌더링합니다. 기본적으로 메시의 모든 삼각형을 렌더링하지만, triangleStart , count 인자를 주는 것으로 $[triangleStart, triangleStart+count)$ 범위의 삼각형들만 렌더링하도록 할 수 있습니다. this.boneVisible = true 라면, this.mesh.bones 또한 렌더링합니다.

Renderer 의 그래픽 파이프라인(Graphic pipeline)은 다음처럼 진행됩니다:

  1. Mesh.getTriangle()Mesh.getTriangle() 함수를 통해 렌더링할 삼각형 Triangle 을 가져옵니다.

  2. Material.vertexShader() — 삼각형을 구성하는 세 정점 $\vec{vertex0}\to\vec{vertex1}\to\vec{vertex2}$ 에 정점 셰이더 Material.vertexShader() 를 적용합니다. 정점 셰이더 단계에서는 Deformer.deformPosition() Shader.objectToClipPos() 등을 적용하여, 스켈레탈 애니메이션(Skeletal animation) 적용 및 클립 좌표(clip coordinate)로 변환합니다.

  3. Triangle.backfaceMaterial.backfaceCullingtrue 라면, 삼각형이 뒤를 바라보고 있는지 검사합니다. Triangle.backface 를 통해 검사하며, 결과가 true 라면 삼각형을 그릴 필요가 없습니다. $(4) ⇒ (5)$ 단계를 무시하기에, 성능이 크게 향상됩니다.

  4. Renderer.clipTriangle0()Material.usePerspectivetrue 라면, 원근투영을 사용한다는 의미이며, 현재 삼각형들의 정점은 클립 좌표(clip coordinate)라고 생각합니다. NDC 공간을 벗어나지 않도록 Renderer.clipTriangle0() 함수를 통해 삼각형 클리핑(triangle clipping)을 진행합니다.

  5. Renderer.drawTriangle2D()Renderer.drawTriangle2D() 함수를 사용하여 삼각형을 픽셀 그래픽(pixel graphic)으로 변환하는 $Rasterization$ 단계를 수행합니다.

    1. Material.fragmentShader() — 픽셸 셰이더 Material.fragmentShader() 를 적용합니다. 픽셸 셰이더 단계에서는 Shader.tex2D() 등을 사용하여 최종 색상을 결정합니다.

Syntax

renderer.renderMesh()
renderer.renderMesh(triangleStart, count)

Parameters

triangleStart

count

Return value

(none)