$30 off During Our Annual Pro Sale. View Details »

作ってわかるレンダリングパイプライン〜CPUで3D描画〜

ta_ka_tsu
September 02, 2018

 作ってわかるレンダリングパイプライン〜CPUで3D描画〜

iOSDC 2018 発表資料

ta_ka_tsu

September 02, 2018
Tweet

More Decks by ta_ka_tsu

Other Decks in Technology

Transcript

  1. ࡞ͬͯΘ͔Δ
    ϨϯμϦϯά
    ύΠϓϥΠϯ
    d$16Ͱ%ඳըd
    iOSDC Japan 2018

    View Slide

  2. !UB@LB@UTV
    ذෞݝࡏॅ
    ࣗݾ঺հ

    View Slide

  3. !UB@LB@UTV
    ذෞݝࡏॅ
    ࣗݾ঺հ
    %$"%ܥϓϩάϥϚʔ

    View Slide

  4. !UB@LB@UTV
    ذෞݝࡏॅ
    ࣗݾ঺հ
    %$"%ܥϓϩάϥϚʔ
    %$".ܥϓϩάϥϚʔ

    View Slide

  5. !UB@LB@UTV
    ذෞݝࡏॅ
    ࣗݾ঺հ
    %$"%ܥϓϩάϥϚʔ
    %$".ܥϓϩάϥϚʔ
    ձࣾઃཱ

    View Slide

  6. !UB@LB@UTV
    ذෞݝࡏॅ
    ࣗݾ঺հ
    %$"%ܥϓϩάϥϚʔ
    %$".ܥϓϩάϥϚʔ
    ϑϦʔϥϯεˡ/PX
    ձࣾઃཱ

    View Slide

  7. !UB@LB@UTV
    ذෞݝࡏॅ
    ࣗݾ঺հ
    %$"%ܥϓϩάϥϚʔ
    %$".ܥϓϩάϥϚʔ
    ϑϦʔϥϯεˡ/PX
    ձࣾઃཱ

    View Slide

  8. ֓ཁ
    ཧղ
    ෼ղ
    ࠶ߏங
    ϨϯμϦϯά
    ύΠϓϥΠϯͷ

    View Slide

  9. ཧղ
    ϨϯμϦϯά
    ύΠϓϥΠϯͷ
    6OEFSTUBOEJOH

    View Slide

  10. σʔλ͔Βը૾ͳͲΛಘΔ͜ͱ
    ϨϯμϦϯά
    ύΠϓϥΠϯͱ͸
    ϨϯμϦϯάɿ
    ෳ਺ͷॲཧΛ௚ྻʹܨ͍ͩҰ࿈ͷॲཧ
    ύΠϓϥΠϯɿ
    %άϥϑΟοΫεΛܭࢉ͢Δ
    ॲཧํࣜͷͭ

    View Slide

  11. ϨϯμϦϯά
    ύΠϓϥΠϯͰඳ͚Δ΋ͷ
    ɾ఺

    View Slide

  12. ɾ఺
    ɾઢ
    ϨϯμϦϯά
    ύΠϓϥΠϯͰඳ͚Δ΋ͷ

    View Slide

  13. ɾ఺
    ɾઢ
    ɾࡾ֯ܗ
    ϨϯμϦϯά
    ύΠϓϥΠϯͰඳ͚Δ΋ͷ

    View Slide

  14. ɾ఺
    ɾઢ
    ɾࡾ֯ܗ ϙϦΰϯ

    ϓϦϛςΟϒ
    ϓϦϛςΟϒ

    View Slide

  15. ɾ఺ʜ௖఺ͭ
    ɾઢʜ௖఺ͭ
    ɾࡾ֯ܗʜ௖఺ͭ
    ϓϦϛςΟϒ

    View Slide

  16. ௖఺ଐੑ
    ௖఺ଐੑ
    ɾҐஔ

    View Slide

  17. ௖఺ଐੑ
    ɾ৭
    ௖఺ଐੑ
    ɾҐஔ

    View Slide

  18. ௖఺ଐੑ
    ɾ৭
    ௖఺ଐੑ
    ɾҐஔ
    ɾ๏ઢϕΫτϧ
    ɾʜ
    ɾςΫενϟ࠲ඪ

    View Slide

  19. %σʔλ
    ύΠϓϥΠϯ
    ϨϯμϦϯά
    ϑϨʔϜόοϑΝ
    ϨϯμϦϯάύΠϓϥΠϯͷೖग़ྗ

    View Slide

  20. ϨϯμϦϯάύΠϓϥΠϯͷೖग़ྗ
    ௖఺ྻ
    ύΠϓϥΠϯ
    ϨϯμϦϯά
    ϑϨʔϜόοϑΝ

    View Slide

  21. ϨϯμϦϯάύΠϓϥΠϯͷೖग़ྗ
    ௖఺ྻ
    ύΠϓϥΠϯ
    ϨϯμϦϯά
    ϑϨʔϜόοϑΝ

    View Slide

  22. ϨϯμϦϯάύΠϓϥΠϯͷೖग़ྗ
    ௖఺ྻ
    6OJGPSN

    ڞ௨σʔλ
    ύΠϓϥΠϯ
    ϨϯμϦϯά
    ϑϨʔϜόοϑΝ

    View Slide

  23. ϨϯμϦϯάύΠϓϥΠϯͷೖग़ྗ
    ௖఺ྻ
    ύΠϓϥΠϯ
    ϨϯμϦϯά
    ϑϨʔϜόοϑΝ
    ඳը໋ྩ
    %SBX$BMM

    6OJGPSN

    ڞ௨σʔλ

    View Slide

  24. %FDPNQPTJUJPO
    ෼ղ
    ϨϯμϦϯά
    ύΠϓϥΠϯͷ

    View Slide

  25. ϨϯμϦϯάύΠϓϥΠϯͷೖग़ྗ
    ௖఺ྻ
    ϑϨʔϜόοϑΝ
    6OJGPSN

    ڞ௨σʔλ
    ύΠϓϥΠϯ
    ϨϯμϦϯά

    View Slide

  26. ϨϯμϦϯάύΠϓϥΠϯͷೖग़ྗ
    ௖఺ྻ
    ϓϦϛςΟϒΞηϯϒϦ
    ௖఺ॲཧ
    ϥελϥΠζ
    ϑϥάϝϯτॲཧ
    ϐΫηϧૢ࡞
    6OJGPSN

    ڞ௨σʔλ
    ϑϨʔϜόοϑΝ

    View Slide

  27. ௖఺ॲཧ
    ϓϦϛςΟϒΞηϯϒϦ
    ϥελϥΠζ
    ϑϥάϝϯτॲཧ
    ϐΫηϧૢ࡞
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ

    View Slide

  28. ௖఺ॲཧ
    ௖఺ྻ
    ೖྗɿ
    ௖఺ྻ
    ग़ྗɿ
    ௖఺ॲཧ

    View Slide

  29. ௖఺ॲཧɿ௖఺γΣʔμʔ
    ௖఺
    ௖఺
    ௖఺γΣʔμʔ
    ڞ௨σʔλ
    ɾଐੑ"
    ɾҐஔ
    ɾଐੑ#
    ɾଐੑ$
    ɾଐੑ%
    ɾҐஔ
    ɾଐੑ&

    View Slide

  30. ௖఺ॲཧɿ௖఺γΣʔμʔ
    ɾ৭
    ɾҐஔ
    ɾ๏ઢϕΫτϧ
    ɾ৭
    ɾҐஔ
    ௖఺ଐੑ
    ௖఺ଐੑ
    ௖఺γΣʔμʔ

    View Slide

  31. ௖఺ॲཧɿΫϦοϐϯά
    ΫϦοϐϯάۭؒ
    .FUBMͰ͸
    −1 ≦ x ≦ 1
    −1 ≦ y ≦ 1
    0 ≦ z ≦ 1

    View Slide

  32. ௖఺ॲཧɿΫϦοϐϯά

    View Slide

  33. ௖఺ॲཧɿΫϦοϐϯά

    View Slide

  34. ௖఺ॲཧɿΫϦοϐϯά

    View Slide

  35. ௖఺ॲཧɿΫϦοϐϯά

    View Slide

  36. ௖఺ॲཧɿΫϦοϐϯά

    View Slide

  37. ௖఺ॲཧɿΫϦοϐϯά

    View Slide

  38. ௖఺ॲཧɿΫϦοϐϯά

    View Slide

  39. ௖఺ॲཧɿϏϡʔϙʔτม׵
    ΫϦοϐϯάۭؒ Ϗϡʔ
    Ϗϡʔϙʔτ
    Y
    Z

    View Slide

  40. ௖఺ॲཧɿϏϡʔϙʔτม׵
    ΫϦοϐϯάۭؒ Ϗϡʔ
    Ϗϡʔϙʔτ
    Y
    Z

    View Slide

  41. ϓϦ
    ϛ
    ςΟϒ
    ΞηϯϒϦ
    ϥελϥΠζ
    ϑϥάϝϯτॲཧ
    ϐΫηϧૢ࡞
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ
    ϓϦϛςΟϒΞηϯϒϦ

    View Slide

  42. ϓϦϛςΟϒΞηϯϒϦ
    ௖఺ྻ
    ೖྗɿ
    ϓϦϛςΟϒྻ
    ग़ྗɿ
    ϓϦϛςΟϒ
    ΞηϯϒϦ

    View Slide

  43. ϓϦϛςΟϒΞηϯϒϦ
    V[0]
    V[1]
    V[2]
    V[3]
    V[4]

    View Slide

  44. 1PJOUT
    ϓϦϛςΟϒΞηϯϒϦ
    V[1]
    V[2] V[3]
    V[4]
    Point[0]
    Point[1]
    Point[2]
    Point[3]
    Point[4]
    V[0]

    View Slide

  45. -JOFT
    ϓϦϛςΟϒΞηϯϒϦ
    V[0]
    V[1]
    V[2] V[3]
    V[4]
    Line[0]
    Line[1]

    View Slide

  46. -JOF4USJQ
    ϓϦϛςΟϒΞηϯϒϦ
    V[0]
    V[1]
    V[2] V[3]
    V[4]
    Line[0]
    Line[1]
    Line[2]
    Line[3]

    View Slide

  47. 5SJBOHMFT
    ϓϦϛςΟϒΞηϯϒϦ
    V[0]
    V[1]
    V[2] V[3]
    V[4]
    Triangle[0]

    View Slide

  48. 5SJBOHMF4USJQ
    ϓϦϛςΟϒΞηϯϒϦ
    V[0]
    V[1]
    V[2] V[3]
    V[4]
    Triangle[0]
    Triangle[1]
    Triangle[2]

    View Slide

  49. 5SJBOHMF'BO
    ϓϦϛςΟϒΞηϯϒϦ
    -JOF-PPQ
    Triangle[0]
    Triangle[1]
    Triangle[2]
    Line[0]
    Line[1]
    Line[2]
    Line[3]
    Line[4]
    V[0]
    V[1]
    V[2]
    V[3]
    V[4] V[4]
    V[0]
    V[1]
    V[2]
    V[3]

    View Slide

  50. ϓϦϛςΟϒΞηϯϒϦɿΧϦϯά Φϓγϣϯ

    View Slide

  51. ϓϦϛςΟϒΞηϯϒϦɿΧϦϯά Φϓγϣϯ

    View Slide

  52. ϓϦϛςΟϒΞηϯϒϦɿΧϦϯά Φϓγϣϯ

    View Slide

  53. ϓϦϛςΟϒΞηϯϒϦɿΧϦϯά Φϓγϣϯ

    ໘ͷ޲͖ʁ

    View Slide

  54. 0
    2 1
    ࣌ܭճΓ $8

    ϓϦϛςΟϒΞηϯϒϦɿΧϦϯά Φϓγϣϯ

    0
    1 2
    ൓࣌ܭճΓ $$8

    PS

    View Slide

  55. ϥελϥΠζ
    ϓϦϛςΟϒΞηϯϒϦ
    ϑϥάϝϯτॲཧ
    ϐΫηϧૢ࡞
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ
    ϥελϥΠζ

    View Slide

  56. ϥελϥΠζ
    ϓϦϛςΟϒྻ
    ೖྗɿ
    ϑϥάϝϯτྻ
    ग़ྗɿ
    ϥελϥΠζ

    View Slide

  57. ϥελϥΠζ

    View Slide

  58. ϥελϥΠζ

    View Slide

  59. ϥελϥΠζ
    ϑϥάϝϯτ
    ɾ;஋
    ɾϐΫηϧ࠲ඪ
    ɾଐੑ"
    ɾଐੑ#
    ɾ

    View Slide

  60. ϥελϥΠζ

    View Slide

  61. ϥελϥΠζ

    View Slide

  62. ϥελϥΠζɿϑϥάϝϯτͷ஋
    P0
    P1
    P
    s
    t
    P =
    t
    s + t
    P0
    +
    s
    s + t
    P1
    = w0
    P0
    + w1
    P1
    (w0
    + w1
    = 1)
    AP
    = w0
    AP0
    + w1
    AP1
    AX
    ɿ఺ X ͷଐੑ஋

    View Slide

  63. ϥελϥΠζ

    View Slide

  64. ϥελϥΠζ

    View Slide

  65. ϥελϥΠζɿϑϥάϝϯτͷ஋
    P0
    P1
    Q
    s1
    t1
    Q =
    t1
    s1
    + t1
    P0
    +
    s1
    s1
    + t1
    P1
    = w0
    P0
    + w1
    P1
    + w2
    P2
    (w0
    + w1
    + w2
    = 1)
    P
    P2
    s2
    t2
    P =
    t2
    s2
    + t2
    Q +
    s2
    s2
    + t2
    P2
    AP
    = w0
    AP0
    + w1
    AP1
    + w2
    AP2

    View Slide

  66. ϑϥά
    ϝϯτ
    ॲཧ
    ϓϦϛςΟϒΞηϯϒϦ
    ϐΫηϧૢ࡞
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ
    ϥελϥΠζ
    ϑϥάϝϯτॲཧ

    View Slide

  67. ϑϥάϝϯτॲཧ

    ϑϥάϝϯτྻ
    ग़ྗɿ
    ϑϥάϝϯτྻ
    ೖྗɿ
    ϑϥάϝϯτ
    ॲཧ

    View Slide

  68. ϑϥάϝϯτॲཧ
    ϑϥά
    ϝϯτ
    ɾϐΫηϧ࠲ඪ
    ɾଐੑ"
    ɾଐੑ#
    ɾ;஋
    ɾ৭
    ɾ
    ڞ௨σʔλ
    ϑϥάϝϯτ
    γΣʔμʔ

    View Slide

  69. ϑϥάϝϯτॲཧ
    ϑϥά
    ϝϯτ
    ɾϐΫηϧ࠲ඪ
    ɾଐੑ"
    ɾଐੑ#
    ɾ;஋
    ɾϐΫηϧ࠲ඪ
    ɾ৭
    ɾ;஋
    ɾ
    ڞ௨σʔλ ৭
    ϑϥά
    ϝϯτ
    ϑϥάϝϯτ
    γΣʔμʔ

    View Slide

  70. ϑϥάϝϯτॲཧɿϑϥάϝϯτγΣʔμʔ
    ϑϥάϝϯτγΣʔμʔ
    ɾϐΫηϧ࠲ඪ
    ɾςΫενϟ࠲ඪ
    ɾ৭
    ςΫενϟ
    ڞ௨σʔλ

    ɾ;஋

    View Slide

  71. ϐΫηϧ
    ૢ࡞
    ϓϦϛςΟϒΞηϯϒϦ
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ
    ϥελϥΠζ
    ϑϥάϝϯτॲཧ
    ϐΫηϧૢ࡞

    View Slide

  72. ϐΫηϧૢ࡞
    ϑϨʔϜόοϑΝ
    ग़ྗɿ

    ϑϥάϝϯτྻ
    ೖྗɿ
    ϐΫηϧૢ࡞
    ΧϥʔόοϑΝ
    σϓεόοϑΝ
    εςϯγϧόοϑΝ

    View Slide

  73. ϐΫηϧૢ࡞ɿσϓεςετ Φϓγϣϯ

    ྘Λઌʹॻ͍ͨ৔߹ ਫ৭Λઌʹॻ͍ͨ৔߹

    View Slide

  74. ϐΫηϧૢ࡞ɿσϓεςετ Φϓγϣϯ

    ௨աͨ͠;஋Λ
    ্ॻ͖
    0.6
    0.4
    0.2
    σϓεόοϑΝ
    0.6
    0.4
    0.2
    0.6
    0.4
    0.2
    0.6
    0.4
    0.2
    0.5
    0.5
    0.5
    0.5
    0.5 0.5
    0.6
    0.5
    0.5
    0.6
    0.5
    0.5
    0.6
    0.4
    0.5
    0.6
    0.4
    0.2
    0.5
    0.5
    0.5
    0.5 0.5
    σϓεόοϑΝ
    ϑϥά
    ϝϯτ ϑϥά
    ϝϯτ

    View Slide

  75. ϐΫηϧૢ࡞ɿϒϨϯσΟϯά Φϓγϣϯ

    α × +(1 − α) × =

    View Slide

  76. 3FDPOTUSVDUJPO
    ࠶ߏங
    ϨϯμϦϯά
    ύΠϓϥΠϯͷ

    View Slide

  77. Լ४උ

    View Slide

  78. ࠞͥ߹ΘͤՄೳͳܕ
    protocol Addable {
    static func +(lhs:Self, rhs:Self) -> Self
    }
    protocol Scalable {
    static func *(scale:Float, value:Self) -> Self
    }
    protocol Blendable : Addable, Scalable {
    }

    View Slide

  79. ৭ͷ४උ
    struct Color4f : Blendable {
    let r: Float
    let g: Float
    let b: Float
    let a: Float
    }

    View Slide

  80. ৭ͷ४උ
    struct Color4ui {
    let r: UInt8
    let g: UInt8
    let b: UInt8
    let a: UInt8
    }

    View Slide

  81. ௖఺ͷ४උ
    class Vertex3 {
    var position : float3
    var attribute : T
    . . .
    }
    class Vertex4 {
    var position : float4
    var attribute : T
    . . .
    }

    View Slide

  82. ϑϥάϝϯτͷ४උ
    class Fragment {
    let x: Int
    let y: Int
    let z: Float
    let attribute: T
    . . .
    }

    View Slide

  83. ϑϨʔϜόοϑΝͷ४උ
    protocol BufferPlane {
    associatedtype CellType
    var width: Int { get }
    var height: Int { get }
    subscript(x: Int, y: Int) -> CellType { get set }
    }

    View Slide

  84. class ColorBuffer : BufferPlane {
    let width: Int
    let height: Int
    subscript (x: Int, y: Int) -> Color4ui {
    . . .
    }
    }
    ϑϨʔϜόοϑΝͷ४උ

    View Slide

  85. class DepthBuffer : BufferPlane {
    let width: Int
    let height: Int
    subscript (x: Int, y: Int) -> Float {
    . . .
    }
    }
    ϑϨʔϜόοϑΝͷ४උ

    View Slide

  86. Ϗϡʔͷ४උ
    CALayer

    View Slide

  87. Ϗϡʔϙʔτͷ४උ
    class Viewport {
    let x: Int
    let y: Int
    let width: Int
    let height: Int
    . . .
    }

    View Slide

  88. ύΠϓϥΠϯͷ४උ
    class RenderPipeline {
    var vertexBuffer : [Vertex4]!
    var viewport: Viewport?
    var vertexShader : ((Vertex4) -> Vertex4)!
    var fragmentShader : ((Fragment) -> Color4f?)!
    var colorBuffer : ColorBuffer!
    var depthBuffer : DepthBuffer?
    . . .
    }

    View Slide

  89. ௖఺ॲཧ ϓϦϛςΟϒΞηϯϒϦ
    ϥελϥΠζ
    ϑϥάϝϯτॲཧ
    ϐΫηϧૢ࡞
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ
    ͷ
    ࠶ߏங

    View Slide

  90. ௖఺ॲཧ
    let convertedVertices = vertexBuffer.map {
    (vertex:Vertex4) -> Vertex3 in
    let v = vertexShader(vertex)
    // divide by w
    let pos = v.position.project()
    // Viewport Transformation
    let screenPosition = transform(position: pos, toViewport: vp)
    return Vertex3(position: screenPosition, attribute: v.attribute)
    }

    View Slide

  91. ϓϦ
    ϛ
    ςΟϒ
    ΞηϯϒϦ
    ϥελϥΠζ
    ϑϥάϝϯτॲཧ
    ϐΫηϧૢ࡞
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ
    ϓϦϛςΟϒΞηϯϒϦ
    ͷ
    ࠶ߏங

    View Slide

  92. ϓϦϛςΟϒΞηϯϒϦ
    enum Primitive {
    case point(Vertex3)
    case line(Vertex3, Vertex3)
    case triangle(Vertex3, Vertex3, Vertex3)
    }

    View Slide

  93. ϓϦϛςΟϒΞηϯϒϦ
    var primitives: [Primitive]
    . . .
    let numOfTriangles = convertedVertices.count / 3
    primitives = (0..Primitive.triangle(convertedVertices[$0*3],
    convertedVertices[$0*3 + 1],
    convertedVertices[$0*3 + 2])
    }.filter{ (primitive) -> Bool in
    if cullFace { return primitive.isCCW() }
    else { return true }
    }

    View Slide

  94. ϥελϥΠζ ϓϦϛςΟϒΞηϯϒϦ
    ϑϥάϝϯτॲཧ
    ϐΫηϧૢ࡞
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ
    ϥελϥΠζ
    ͷ
    ࠶ߏங

    View Slide

  95. ϥελϥΠζ
    var result = [Fragment]()
    . . .// minX, maxX, minY, maxYΛٻΊ͓ͯ͘
    for py in minY..for px in minX..let p = float2(Float(px) + 0.5, Float(py) + 0.5)
    let (w1, w2, w3) =
    weight(v1: v1, v2: v2, v3: v3, of: p) ?? (-1, -1, -1)
    if w1 < 0 || w2 < 0 || w3 < 0 { continue }
    let eachZ =
    w1 * v1.position.z + w2 * v2.position.z + w3 * v3.position.z
    let eachAttr =
    w1 * v1.attribute + w2 * v2.attribute + w3 * v3.attribute
    result.append(Fragment(x: px, y: py, z: eachZ, attribute: eachAttr))
    }
    }

    View Slide

  96. ͷ
    ࠶ߏங
    ϑϥά
    ϝϯτ
    ॲཧ ϓϦϛςΟϒΞηϯϒϦ
    ϐΫηϧૢ࡞
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ
    ϥελϥΠζ
    ϑϥάϝϯτॲཧ

    View Slide

  97. ϑϥά
    ϝϯτॲཧ
    // Fragment Processing
    let fragmentResults =
    fragments.map{ (fragment) -> Fragment? in
    if let color = fragmentShader(fragment) {
    return Fragment(
    x: fragment.x,
    y: fragment.y,
    z: fragment.z,
    attribute: color)
    }
    else { return nil }
    }.compactMap { $0 }

    View Slide

  98. ͷ
    ࠶ߏங
    ϐΫηϧ
    ૢ࡞ ϓϦϛςΟϒΞηϯϒϦ
    ϑϨʔϜόοϑΝ
    ௖఺ྻ
    ௖఺ॲཧ
    ϥελϥΠζ
    ϑϥάϝϯτॲཧ
    ϐΫηϧૢ࡞

    View Slide

  99. ϐΫηϧૢ࡞
    // Per Sampling Operation
    fragmentResults.forEach { (fragment) in
    if let depthBuffer = depthBuffer {
    if depthBuffer[fragment.x, fragment.y] > fragment.z { return }
    depthBuffer[fragment.x, fragment.y] = fragment.z
    }
    colorBuffer[fragment.x, fragment.y] = fragment.attribute.toColor4ui()
    }

    View Slide

  100. ׬੒

    View Slide

  101. %&.0

    View Slide

  102. ղઆɿ.BU$BQ .BUFSJBM$BQUVSFT

    View Slide

  103. ղઆɿ.BU$BQ .BUFSJBM$BQUVSFT

    ςΫενϟ
    1.0
    1.0

    View Slide

  104. ղઆɿ.BU$BQ .BUFSJBM$BQUVSFT

    ςΫενϟ
    1.0
    1.0
    ୯Ґ๏ઢϕΫτϧ

    View Slide

  105. ղઆɿ.BU$BQ .BUFSJBM$BQUVSFT

    ςΫενϟ
    1.0
    1.0
    ୯Ґ๏ઢϕΫτϧ
    ൒෼ʹͯ͠
    Φϑηοτ

    View Slide

  106. ղઆɿ.BU$BQ .BUFSJBM$BQUVSFT

    ςΫενϟ
    1.0
    1.0
    ୯Ґ๏ઢϕΫτϧ

    View Slide

  107. ·ͱΊ

    View Slide

  108. ·ͱΊ
    ɾϨϯμϦϯάύΠϓϥΠϯ͸࡞ΕΔ

    View Slide

  109. ·ͱΊ
    ɾϨϯμϦϯάύΠϓϥΠϯ͸࡞ΕΔ
    ɾࣗ෼Ͱ࡞ͬͯΈΔͱཧղ͕ਂ·Δ

    View Slide

  110. ·ͱΊ
    ɾϨϯμϦϯάύΠϓϥΠϯ͸࡞ΕΔ
    ɾࣗ෼Ͱ࡞ͬͯΈΔͱཧղ͕ਂ·Δ
    ɾ(16͍͢͝

    View Slide

  111. ·ͱΊ
    ɾϨϯμϦϯάύΠϓϥΠϯ͸࡞ΕΔ
    ɾࣗ෼Ͱ࡞ͬͯΈΔͱཧղ͕ਂ·Δ
    ɾ(16͍͢͝
    ɾࠓͲ͖ͷεϚʔτϑΥϯͷ$16΋͍͢͝

    View Slide

  112. ·ͱΊ
    ɾϨϯμϦϯάύΠϓϥΠϯ͸࡞ΕΔ
    ɾࣗ෼Ͱ࡞ͬͯΈΔͱཧղ͕ਂ·Δ
    ɾ(16͍͢͝
    ɾϓϩάϥϛϯάָ͍͠
    ɾࠓͲ͖ͷεϚʔτϑΥϯͷ$16΋͍͢͝

    View Slide

  113. &OKPZ
    1SPHSBNNJOH

    View Slide

  114. ςΫενϟϚοϐϯάૉࡐɿ
    https://www.3dxo.com/textures
    إૉࡐɿ
    Θͨ͠
    MatCapૉࡐɿ
    https://www.pixelfondue.com/blog/30matcaps

    View Slide