<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
    <channel>
        <title>loading...</title>
        <link>http://magicpotato.com/</link>
        <description></description>
        <language>ko</language>
        <pubDate>Tue, 07 Sep 2010 08:49:09 +0900</pubDate>
        <lastBuildDate>Tue, 07 Sep 2010 08:49:09 +0900</lastBuildDate>
        <generator>XpressEngine 1.4.1.1</generator>
                                <item>
            <title>=기타/펌= Microsoft Visual Studio: Visual C++ 10과 C++0x</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=582</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=582</guid>
                        <comments>http://magicpotato.com/?document_srl=582#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;원본 : &lt;a href=&quot;http://lolisia.tistory.com/124&quot; target=&quot;_blank&quot;&gt;http://lolisia.tistory.com/124&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#4f4f4f&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#4f4f4f&quot;&gt;VC2010은 이미 정식출시, 편한게 많아보인다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#4f4f4f&quot;&gt;pdf는 한글이니까 보는데 오래 안걸림.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#4f4f4f&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#4f4f4f&quot;&gt;PDF : &lt;a href=&quot;http://download.microsoft.com/download/1/9/4/194B6F74-8A72-482D-AF0E-31CE9D855372/VisualC.PDF&quot; target=&quot;_blank&quot;&gt;http://download.microsoft.com/download/1/9/4/194B6F74-8A72-482D-AF0E-31CE9D855372/VisualC.PDF&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#4f4f4f&quot;&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;font color=&quot;#4f4f4f&quot;&gt;
&lt;hr style=&quot;BORDER-BOTTOM-COLOR: black; BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-COLOR: black; DISPLAY: block; BORDER-TOP-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 0px; HEIGHT: 1px; BORDER-RIGHT-COLOR: black; BORDER-LEFT-COLOR: black; BORDER-LEFT-WIDTH: 0px&quot; /&gt;
&lt;/font&gt;&lt;/div&gt;&lt;br  /&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;0. 서두&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;0.1 C++의 문제점&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;0.2 C++는 시대에 뒤 떨어진 프로그래밍 언어 일까요?&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;1. C++0x에 대해서&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;1.1 C++의 새로운 표준 C++0x&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;1.2 Visual C++의 이전 버전과의 호환성&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;1.3 Visual C++ 9와 Visual C++ 10&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2. auto&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2.1 정적 언어와 동적 언어의 차이&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2.2 C#의 var&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2.3 C++에서 STL(표준 템플릿 라이브러리)를 사용할 때 불편한 점&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2.4 컴파일 타임 때 타입을 정하는 &apos;auto&apos;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2.5 auto를 사용한 예제&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2.5.1 지역 변수로 사용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2.5.2 클래스 정의에 사용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2.5.3 STL에서 사용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2.6 핵심 요약&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;3. static_assert&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;3.1 assert와 #error&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;3.2 assert와 #error를 사용할 수 없을 때&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;3.3 static_assert의 형식&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;3.4 static_assert 사용예&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;3.4.1 프리프로세스 지시어 대체&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;3.4.2 템플릿에서 사용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;3.4.3 변수의 크기 조사&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;3.5 핵심요약&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4. 우측값참조(RValue Reference)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.1 C++98/03에서의 실수&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.2 좌측 값(LValue)과 우측 값(RValue)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.3 좌측 값 참조와 우측 값 참조&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.4 Move semantics&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.5 Move 생성자와 Move 대입연산자&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.6 Move semantics에 의한 성능 향상&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.7 move 생성자와 move 대입연산자 사용 예&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.8 std::move&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.9 VC 10에서의 STL과 우측 값 참조&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.10 우측 값 참조를 사용할 때 주의할 점&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.11 우측 값 참조와 좌측 값 참조의 함수 오버로드&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.12 우측 값 참조는 우측 값이 아니다&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.13 Perfect Forwarding&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;4.14 핵심요약&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5. 람다(lambda)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.1 C#과 람다&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.2 C++에서 STL 알고리즘을 사용할 때 불편했던 점&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.3 C++에서의 람다 사용법&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.3.1 문법&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.3.2 람다를 변수에 대입&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.3.3 람다를 함수의 인자로 사용하기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.3.4 람다의 파라미터&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.3.5 반환 값 넘기기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.4 캡쳐&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.5 클래스에서 람다 사용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.6 STL의 find_if에서 람다 사용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.7 람다 식을 STL 컨테이너에 저장&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.8 람다를 반환하 는함수&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.9 람다에서의 재귀&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;5.10 핵심요약&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;6. decltype&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;6.1 템플릿 프로그래밍 시 문제&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;6.2 decltype 사용하기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;7. nullptr&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;7.1 nullptr이 필요한 이유&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;7.2 nullptr 구현 안&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;7.3 nullptr 사용 방법&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; WHITE-SPACE: pre&quot; class=&quot;Apple-tab-span&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;7.4 nullptr의 올바른 사용과 틀린 사용예&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;8. 참고&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
                        <pubDate>Fri, 23 Apr 2010 17:03:01 +0900</pubDate>
                                    <slash:comments>2</slash:comments>
                    </item>
                <item>
            <title>=팁/플래시AS= 무비클립 계층구조 동적생성시 염두해 두어야 하는 것</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=537</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=537</guid>
                        <comments>http://magicpotato.com/?document_srl=537#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;팁1) 계층구조에서의 &lt;/span&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;키 프레임과 액션스크립트 처리에 대한 고려사항&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스케일폼을 이용해서 게임UI를 플래시와 연동할 경우 무비클립에 대한 동적생성이 필요할 때가 있는데,&lt;br  /&gt;이때 타임라인의 키 프레임이 어떻게 처리되는지를 이해해야 할 필요가 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;예시를 설명하면서 살짝 이해해보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;게임UI를 플래시로 구현할 경우 각 다이얼로그의 시스템 버튼같은것들에 대해서&lt;br  /&gt;노가다를 피하기 위해 동적생성을 한다고 해보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예시로 드려는 구조는 다음과 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainStage - ControlContainer - TheControl&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;table style=&quot;BACKGROUND: #636363&quot; cellSpacing=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;BACKGROUND: #ffffff&quot;&gt;
&lt;td&gt;
&lt;p&gt;MainStage&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;플래시 최상위 스테이지&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;BACKGROUND: #ffffff&quot;&gt;
&lt;td&gt;
&lt;p&gt;ControlContainer&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;임의의 게임UI 윈도우 (환경설정창, 친구목록창 등이 될 수 있다)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;BACKGROUND: #ffffff&quot;&gt;
&lt;td&gt;
&lt;p&gt;TheControl&lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;시스템 버튼 (예시)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;플래시의 타임라인의 키 프레임에 대한 이해가 필요한데,&lt;br  /&gt;키 프레임에 액션스크립트 요소를 고려해서 생각할 때 다음과 같은 방식으로 작동할 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1.0) 해당 키 프레임을 화면에 보여줄 때가 되어서 키프레임 처리 프로세스 진입&lt;br  /&gt;1.1) 해당 키 프레임의 액션스크립트를 처리&lt;br  /&gt;1.2) 해당 키 프레임의 인스턴스들을 화면에 출력&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;무비클립을 계층구조로 동적생성하는 비 추천 구조는 다음과 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;MainStage의 1번 키 프레임에서 ControlContainer를 동적생성&lt;br  /&gt;ControlContainer의 1번 키 프레임에서 TheControl을 동적생성&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;액션 스크립트의 실행 순서는 다음과 같이 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;Stage-1.0 &amp;gt; Stage-1.1 &amp;gt; Stage-1.2 &amp;gt; Container-1.0 &amp;gt; Container-1.1 &amp;gt; Container-1.2 &amp;gt; TheControl-1.0 &amp;gt; TheControl-1.2&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;위와 같은 형태로 각 무비클립의 첫 키프레임에 액션스크립트를 삽입할 경우, 각 스크립트에서는 &apos;동적생성&apos;만 할 수 있다.&lt;br  /&gt;예를들어 Stage-2.1 과정에서는 Container.TheControlA 가 생성된 상태가 아니기 때문에 속성을 설정하거나 얻을 수 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;플래시는 액션스크립트를 두가지 방식으로 작성할 수 있다.&amp;nbsp; (얼핏 3가지였던걸로 기억하는데 아닌가?)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;2.1) 스테이지, 무비클립별 타임라인&lt;br  /&gt;2.2) 외부 스크립트, 무비클립 심볼에 대응되는 클래스 스크립트[심볼이름.as 스크립트 파일 (SymbolProperties-Linkage-Class)]&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 상황에서는 2.1 방식을 사용할 경우 동적생성 키프레임과 세팅하는 키 프레임을 나눠주어야 한다.&lt;br  /&gt;2.2를 사용할 경우 무비클립이 모두 로드되는 시점에 생성과 값설정을 몰아서 할수 있을것 같다. (안해봤음)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;&lt;strong&gt;팁2) 다수의 UI를 관리하는 구조에 대하여&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스케일폼이 2010년 후반기에 액션스크립트 3.0을 지원한다고 하는데,&lt;br  /&gt;당분간 게임업계 종사자들은 액션스크립트 2.0기반으로 작업을 할것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;게임UI가 상당히 많아서 각 UI프로그래머가 이것을 어떻게 관리할지는 회사마다 다를것 같은데,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나는 createEmptyMovieClip() 과 loadMovie()의 조합을 권장한다. (더 좋은게 있는지 찾아보지는 않았음)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여러개의 fla로 UI를 개발했다면, attachMovie를 이용할 경우 취합하는 fla의 스테이지의 안보이는 영역에 모든 서브 컨트롤을 끌어 놓아야 하기 때문이다.&lt;br  /&gt;이것들은 게임 구동시 중복 인스턴스가 될 것이고, 유지보수를 하는데 불편하지 않나 싶다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* 계층적 fla별 액션스크립트를 구현할 경우 lockroot 속성에 대해 알고 있어야 한다. (rootlock였나 -_- ㅈㅅ)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;위 2가지 문제는 모두 액토즈소프트의 주정현님의 도움으로 해결했습니다.&lt;br  /&gt;형 고마워!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Wed, 07 Apr 2010 06:21:15 +0900</pubDate>
                                    <slash:comments>4</slash:comments>
                    </item>
                <item>
            <title>=사설= &quot;그들에게 1+1은 2가 아니다&quot; - 당신의 true는 어째서 그들에게 true가 아닌가, 개발철학과 시야에 대한 이야기 (ver2)</title>
            <dc:creator>administrator</dc:creator>
            <link>http://magicpotato.com/?document_srl=478</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=478</guid>
                        <comments>http://magicpotato.com/?document_srl=478#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;2010.03.29. ver2 명국진(&lt;a href=&quot;http://magicpotato.com/&quot;&gt;http://magicpotato.com&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;2010.03.24. ver1&lt;br  /&gt;2010.02.06. 초안&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;목차&lt;/strong&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;0. 들어가기&lt;br  /&gt;1. 준비하기 : 우리는 모두 사람-남으로부터 배운다.&lt;br  /&gt;2. 준비하기 : 우리는 어떤 사람으로부터 어떤 것을 배우는가?&lt;br  /&gt;3. 개발철학&lt;br  /&gt;4. 기술 오남용&lt;br  /&gt;5. 시야, 당신의 true가 그들에게 true가 될 수 없는 이유&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;0. 들어가기&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 글은 빈번하게 다른 사람들과 부딛히는데, 이유를&amp;nbsp;명확히 알지 못하겠는&amp;nbsp;프로그래머를 위한 글이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 프로그래머들은 주로 단방향 형태의 매체를 이용하여 숙련된 프로그래머들이다.&lt;br  /&gt;자신의 지식이 참이라는것에 자신을 갖고있고, 두려움이 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한, 자신이 일을 잘 하고 있다고 확신한다.&lt;/p&gt;
&lt;p&gt;나는 이 글이 정말 자신이 일을 잘 하고있는지 재 확인하고 자신감을 갖거나, 생각을 고치는 계기가 되는 글이었으면 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12px&quot;&gt;나는 이 글에서 2가지를 말하고자 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12px&quot;&gt;프로그래머들의 충돌은 개발철학과 시야에 있다고 생각한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) 개발철학&lt;br  /&gt;2) 시야&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;&lt;strong&gt;1. 준비하기 : 우리는 모두 남=&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;사람&lt;/span&gt;으로부터 배운다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선, 우리가 알고 있는것이 정말 true인지 다시 생각해야 할 필요가 있다.&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;사람은 기본적으로 감정이 있으며 오류를 일으킬 수 있는 존재이며,&lt;br  /&gt;개개인별로 개발철학과 국가의 문화, 소속된 집단과 개발환경이 모두 다르다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;50여명의 학생들이 귓속말로 내용전달을 하는것을 기억해보자.&lt;br  /&gt;&lt;u&gt;사람은 불완전한 존재이다.&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;무언가 물어봤을때 자존심때문에 모르는것을 안다고 할수도 있고,&lt;br  /&gt;돈받고 파는 책일지라도 귀찮고 졸려서 날려쓴 부분이 있을 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;텍스트를 맹신하는 사람들이 있다.&lt;br  /&gt;그것 또한 사람이 쓴 것이며 당신이 읽는 이 글 또한 사람이 쓰고 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;우리가 배운것의 출처는 불완전한 존재이며 절대 완전무결 할 수 없다.&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;&lt;strong&gt;2. 준비하기 : 우리는 어떤 사람으로부터 어떤 것을 배우는가?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로그래머가 처음 읽는 사소한 C++입문서 한권도 그에게 큰 영향을 미친다.&lt;br  /&gt;코딩 습관과 개발 철학 또는 인생.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&apos;코딩습관&apos; 과 &apos;개발철학&apos; 이라는 각각의 네글자를 너무 쉽게 지나치는 사람들이 없기를 바란다.&lt;br  /&gt;개발철학, 그들의 개발문화, 그가 속한 개발환경을 항상 염두해 둬야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음들을 보고 하나하나의 항목에 대해서 &lt;strong&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;생각을&amp;nbsp;해보자.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- NASA처럼 수천명의 프로그래머들이 하나의 프로젝트를 진행하는 환경에서 나온 경험으로 쓴 책&lt;br  /&gt;- 한번 릴리즈되면 되돌이킬 수 없는 카트리지 기반의 가정용 게임기 개발자가 속한 개발 환경&lt;br  /&gt;- GNU정신을 너무 좋아해 GNU티셔츠를 입고 쓴 윈도우 프로그래밍 책&lt;br  /&gt;- DOS시절부터 어셈블러와 C를 이용해 20년간 프로그래밍을 하다 교수가 된 사람의 책&lt;br  /&gt;- 유명 대형 게임회사에 처음 입사해서 10년간 몸담고 아직도 실무로 뛰고있는 프로그래머의 책&lt;br  /&gt;- 엑셀을 만드는 팀의 프로그래머가 쓴 책&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;생각하기 쉽도록 과장되게 적어보았다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우리는 이것을 책의 맨 첫 페이지에 있는 &apos;저자약력&apos;을 통해 어느정도 짐작할 수 있다.&lt;br  /&gt;당신이 습득한&amp;nbsp;특정 환경에 종속되어있던 그 지식은 지금 당신이 속한 환경에 정말 적합한 지식인가?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;3. 개발철학&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;단원 1과 2를 통해 나는 우리가 알고있는 정보들이 우리의 개발환경에 맞지 않거나&lt;br  /&gt;적절치 못한 개발철학을 주입당했거나, 틀렸을 수 있으며, 우리는 불완전&amp;nbsp;할 수 있다는&amp;nbsp;것을 전달하고자 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;개발자들은 자신이 옳다고 믿는것을 행할때 어떠한 기준-개발철학을 갖고 행동해야 하는데,&lt;/p&gt;
&lt;p&gt;이번 단원을 통해 그 개발철학을 재 점검하고,&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;당신의 조직의 목표와&amp;nbsp;당신이 가진&amp;nbsp;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;꿈을 적절히&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;타협한&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt; 맞춤형 개발철학을 새로 세울수 있길 바란다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&apos;철학을 어떤 기준으로 세워야 하는가&apos;를 말하기 보다는 3단원과 4단원을 통해 구체적으로 나는 어떤 이유에 의해 내 개발철학이 이렇다는것을 설명하고자 한다.&lt;/p&gt;
&lt;p&gt;추상적이고 이론적인 이야기를 해봤자 자기가 아는 범위 내에서밖에 생각을 하지 못하고&amp;nbsp;입맛에 맞게 바꿔서 듣기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;같은 이야기를 해도 다르게 듣는것을 방지하기 위해서 실제로&amp;nbsp;나 개인의 환경을 전제시키고,&amp;nbsp;실 사례로&amp;nbsp;예시를&amp;nbsp;들면 더 이해가 빠를것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3단원에서 나의 개발철학을 설명하고, 4단원에서 그것을 기반으로&amp;nbsp;실제로 어떻게 행동하는지 설명하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;[내 개발철학]&lt;/p&gt;
&lt;p&gt;어딘가에 소속되어 월급을 받는 프로그래머는 회사가 돈을 버는데 초점을 두고 일해야 한다.&lt;br  /&gt;나는 급여를 받고 그에 책임을 지는 프로그래머를 프로라 정의하며,&lt;br  /&gt;내가 맡은 업무 영역에서 코딩방식이나 설계등의 선택을 해야 할때&lt;br  /&gt;최우선적으로 회사라는 이익집단에 도움이 되는 선택을 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;개인의 기술개발, 호기심에 의한 시험, 스스로 보기에 부끄럽지 않고 객체지향의 원칙을 모두 지키고&lt;br  /&gt;중복이 하나도 없는 남을 보여줘도 부끄럽지 않고 완벽한 코드 구현은 절대 악이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;내 개발 최우선 원칙은 최소비용 개발이다.&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1) 정말 필요한 것만 해야한다.&lt;br  /&gt;2) 내 업무로 인해 동료의 노동력을 낭비시켜서는 안된다.&lt;br  /&gt;3) 내 업무의 딜레이로 인해 동료가 그에 종속된 일을 하지 못하게 해서는 안된다.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정말 필요한것만 하면서 동료의 노동력을 낭비시키지 않기 위해 다음과 같이 한다.&lt;br  /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1) 코드를 쉽게 짠다 - 분석비용을 낮추기 위해 디자인패턴, 템플릿을 사용하지 않는다. &lt;br  /&gt;2) 모든 코드를 플랫폼/프로젝트 종속적으로 짠다. 확장성을 생각하지 않는다.&lt;/p&gt;
&lt;p&gt;3) 어떤것(코딩기법/기술/툴)을 사용하는것에는 분명한 이유가 필요하며, 그것을 사용/적용할 때&amp;nbsp; 기대한 결과를 객관적으로 얻을 수 없으면 그만둬야 한다.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;4. 기술 오남용 - 철학과 관련된 세부 내용 (외전)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나의 true는 이렇다. 당신의 true와 비교해 보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기술을 오남용 하는데 여러가지 이유가 있겠지만&amp;nbsp;내가 생각하기에 가장 큰 이유는 자기 자랑이다.&lt;br  /&gt;고의적이든, 본능에 의해 자기도 모르는사이에 그렇게 하는것이든 자신의 가치를 인정받기 위해, 자신의 실력을 과시하기 위한것. 그 이유가 가장 크다.&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;know-where를 알지 못하면 테크니션을 벗어날 수 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;4단원에서 다룰 몇가지 이슈는 다음과 같은것들이 있는데, 이 항목들은 모두 나의 3.개발철학에 종속되는 이슈들이다.&lt;/p&gt;
&lt;p&gt;2단원에서 언급했던 &apos;환경&apos;을 염두해두고 봐야 한다.&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1) 익스트림 프로그래밍의 페어프로그래밍은 환상이다.&lt;br  /&gt;2) 코드의 확장성을 정말 고려해야 하는가?&lt;br  /&gt;3) OOP는 정말 옳은가?&lt;br  /&gt;4) 하드코딩은 정말 나쁜가?&lt;br  /&gt;5) namespace&lt;br  /&gt;6) 1class당 1file&lt;br  /&gt;7) boost와 메타프로그래밍&lt;br  /&gt;8) 템플릿&lt;br  /&gt;9) 디자인 패턴&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;누군가 또는 책을 통해 어떤 기술을 소개할때 &apos;단점&apos;을 이야기 하는 책은 거의 없다.&lt;br  /&gt;각자의 환경에 정말 맞는 것인지 스스로 생각하고 걸러내지&amp;nbsp;않으면 안된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;1) 익스트림 프로그래밍의 페어프로그래밍은 환상이다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;익스트림 프로그래밍은 절대 익스트림하지 않다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;한 코드를 두명이 붙잡고 의견을 교환하는건 프로젝트 초기에 단기적으로만 필요하다.&lt;br  /&gt;커밋 전에 관계가 전혀 없는 사람과 코드리뷰를 하는쪽이 훨씬 집중도 잘되고 이득이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;익스트림에서 소개하는 정통 페어프로그래밍은 우리나라 문화에 절대 맞지 않는다.&lt;br  /&gt;페어프로그래밍은 그것을 할 수 있는 능력을 갖춘 사람들이 필요한 때(코드커밋 전을 권장)만 해야한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;2) 코드의 확장성을 정말 고려해야 하는가?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나는 경험이 없는 영역에 대해 예측하지 않는다. 확장성을 고려하지 않는다.&lt;br  /&gt;그리고 절대로 멀티플랫폼을 고려하지 않는다. 우리회사는 절대로 온라인 게임만 만드므로.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;경험해 보지도 못한 영역을 열심히 고민해서 코딩해놓고, 그 코드를 수정하지 않고&lt;br  /&gt;그대로 이어서 깔끔하게 사용해본 경험이 얼마나 되는가?&lt;br  /&gt;미지의 영역에 대해 미리 예측해 놓은 모든 코드를 프로젝트 완료하는 시점에 모두 연결했는가?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어떤 코드를 수정하면서 &quot;확장성 있게 작성해 놨더라면, 지금 이걸 안하고 있어도 될텐데&quot;라고 생각할 것이다.&lt;/p&gt;
&lt;p&gt;아무것도 없는 상태에서&amp;nbsp;예상할 수 있는&amp;nbsp;코드는 지금 수정하고 있는 내용이&amp;nbsp;포함되지&amp;nbsp;않을 수도 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지역적인 코드를 수정하는것은 오히려 문제가&amp;nbsp; 명확해 진 상태에서 이루어지기 때문에 전체적인 비용이 낭비되지 않는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;3) OOP는 정말 옳은가?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나를 만족시키는 완벽한 OOP는 게임기획서가 더이상 수정되지 않을 정도로 굳어지고,&lt;br  /&gt;정식 서비스와 해외서비스를 통해 검증된 다음 돈을 벌고 내 계좌로 인센티브가 들어오는 시점에 완성된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일반적으로 엔진 설계를 하지 않는 한 3단계 이상의 상속과 2클래스를 넘기는 다중상속은&lt;br  /&gt;코드 분석비용이 엄청나게 올라간다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;겨우 2개, 3개의 케이스가 나온 상태에서 코드중복 없앤다고 구체화된 구조를 만드는것은 시기상조다.&lt;br  /&gt;수정작업이 반드시 생길것이다. 본인의 경험에 있는 과거를 생각해보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;왜 OOP를 만족해야 하는가부터 생각해야 한다.&lt;br  /&gt;쉽고 빠르게 게임을 만드는게 중요한가? 나를 만족하기 위한 코드가&amp;nbsp;중요한가?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이게 무슨헛소리야 라고 의문을 갖는다면 당신은 아마 OOP를 쓰지 않고 게임을 만들었을때의 고속개발을 경험해 본적이 없을것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4) 하드코딩은 정말 나쁜가?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것은 매 순간마다 작성하는 대상 코드의 성격마다 다르다.&lt;br  /&gt;단윈 5의 시야에서 하드코딩이 필요한 경우를 설명한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;5) namespace&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;당신은 라이브러리 프로그래머인가?&lt;br  /&gt;당신이 코딩할 클래스 이름과 함수이름이 언젠가 붙일 라이브러리의 이름과 정말 겹칠까?&lt;br  /&gt;정말 겹친다면, 그 겹치는 라이브러리를 과연 동시에 2개를 사용할까?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;혹시 멀티플랫폼에서 플랫폼별로 서로 다른 파일/소켓/오디오/렌더링 라이브러리를 사용하는가?&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;나는 윈도우 환경에서 게임브리오를 사용하고, winsock을 이용해 직접 짠 tcp, udp를 사용한다.&lt;br  /&gt;자료구조는 STL의 string, vector, map, list만 사용하며 다른것을 사용하지 않는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;std::string이라고 적지 않아도 우리팀 모든이가 STL임을 아는데 왜 std::를 항상 붙이는가?&lt;br  /&gt;언젠가 super_library::string같은 것을 혼용으로 쓸 생각이 있는가?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;.NET이 네임스페이스로 라이브러리를 카테고리화 한게 멋있는가?&lt;br  /&gt;.NET은 내가 최소 2년간 묶여있을 &apos;IPv4 TCP,UDP, Win32 filesystem&apos;환경만 고려하고 만든게 아니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&apos;언젠가&apos; &apos;만약&apos;이라는 이유로 코딩을 하는것은 전혀 생산적이지 않다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;6) 1class당 1file&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어떤 기능집단에 대해서, 하나의 문서 또는 하나의 헤더파일만 보고&lt;br  /&gt;그 기능집단 요소간 협력구조(종속, 상속관계 등)를 파악할 수 있다면 분석비용이 낮은것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;클래스 하나를 어떻게 짰는지가 중요한게 아니라,&lt;br  /&gt;구조체나 클래스들이 서로 어떤 구조로 협력되는지를 아는것이 더 중요하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;보통 코드분석은 다음과 같이 이루어진다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 설계구조 파악&lt;br  /&gt;2. 클래스별 공개 인터페이스 파악&lt;br  /&gt;3. 클래스별 내부구현 (멤버와 private함수) 파악&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자바에서 하니까, 남들이 하니까, 파일이 너무 크니까, 내가 그렇게 해 왔으니까라는 이유로&lt;br  /&gt;모든 클래스를 1개당 1개 파일로 매칭시키는것은 분석비용을 증가시킨다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 일을 하는것은 동료의 업무량을 늘리는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;7) boost와 메타프로그래밍&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 부스트의 기능은 개인적으로 너무너무 좋아하지만,&lt;br  /&gt;기능을 조금이라도 잘못쓰면 그것을 수정하거나 디버깅하는 비용이 너무 크다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;표준 라이브러리라고 해서 절대로 코드를 잘 짰다고 생각하면 안된다.&lt;br  /&gt;마소에서 짠건데, 국제적으로 공인받는 사람이 짠건데 욕하면 내가 실력없는 거겠지?&lt;br  /&gt;라고 절대 생각해서는 안된다.&lt;br  /&gt;지저분하게 짠건 분명 지저분하게 짠거다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일반 CRT나 STL, boost같은 코드는 코드의 가독성이나 코드리뷰어를 절대 배려하지 않은&lt;br  /&gt;코딩철학도 80년대 수준인 이기적인 코드들이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;제품을 돈받고 서비스하다가 새벽2~3시에 문제가 생기면 제정신일것 같은가?&lt;br  /&gt;그 제정신이 아닐때 부스트같은 코드를 들여다보고 있으면 어떨것 같은가?&lt;br  /&gt;눈감고 그 상황을 생각해보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;짜증이 나는건 절대 사소하지 않다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;8) 템플릿&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;템플릿은 쓰지 말아야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사실 &apos;정말 필요한 경우가 아니면 쓰지 말아야 한다&apos;라고 말하고 싶지만,&lt;br  /&gt;이렇게 말하면 대부분은 정말 필요하지 않은데 사용하기 때문이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;템플릿.. 쓸때는 깔끔하고 기분이 좋은데, 나중에 다시 쳐다보면 분석비용이 너무 높다.&lt;br  /&gt;특히 템플릿템플릿, 단위전략같은 기법은 학술적 차원에서 기분전환용으로 한번 보고 말아야 하는 것들이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컴파일타임에 뭐가 되서 좋다는 소리에 현혹되지 말자.&lt;br  /&gt;대부분은 가상함수 좀 쓰고, 클래스 통째로 복사해서 붙여넣기 하는게 훨씬 낫다.&lt;br  /&gt;가상함수의 성능이 걱정된다면 최적화 전략에 대해 따로 공부하기 바란다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;복사된 두개의 클래스를 고칠때마다 &apos;이걸 어떻게 합칠수 없을까...&apos;라는 생각이 들 것이다.&lt;br  /&gt;그것을 합치면 지옥문이 열린다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;9) 디자인 패턴&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;패턴책을 처음 볼때 왜 패턴이 좋은지 예시로 든 구문이 생각난다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&quot;님 이 코드는 뭐져?&quot;&lt;br  /&gt;&quot;xxx패턴을 찾아보세여&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;커뮤니케이션을 단축시킨다는 차원에서 설명한 내용인데, 과장하면 다음과 같이 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&quot;님 이 코드는 뭐져?&quot;&lt;br  /&gt;&quot;아인슈타인의 상대성 이론을 보시면 이해가 되는 코드입니다.&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;디자인패턴의 개념이 나쁜게 아니라, 그 개개별 패턴이 대부분 복잡한 구현법을 갖는다.&lt;br  /&gt;게임프로그래밍을 할때 쓸만한 디자인패턴은 하나도 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&quot;하나의 인스턴스가 보장되므로&quot;&lt;br  /&gt;싱글턴은 재앙의 시작이다.&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;싱글턴을 사용하는 대상 클래스들은 대부분 어떤 매니저이다.&lt;br  /&gt;파일매니저, 사운드매니저, 렌더러 등등..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런것들은 모두 CApplication::Initialize() 같은 함수에 몰아져 있다.&lt;br  /&gt;이런 매니저를 실수로 중복 생성하는 일은 극히 드물다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;게다가 이런 매니저급 클래스들은 생성 순서가 보장되어야 하는데&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;싱글턴의 단 하나 이점인 &apos;하나의 인스턴스 보장&apos;을 위해 부속 코드가 엄청나게 딸려온다.&lt;/p&gt;
&lt;p&gt;CApplication에 매니저급 클래스들을 다 때려박으면&lt;br  /&gt;g_App.FileMgr, g_App.SoundMgr 식으로 접근하면 된다.&lt;br  /&gt;해당 클래스의 인스턴스 관리도 어디서 하는지 분명하고, 코드 분석비용도 내려간다.&lt;/p&gt;
&lt;p&gt;싱글턴을 쓰는것은 안해도 되는 일을 만들어서 하는것이다&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;비지터정도면 힘든 패턴이라고 말할 수 있다.&lt;br  /&gt;Functor를 사용하는 Traverse를 사용하면 똑같은걸 할 수 있는데 왜 어려운걸 사용하는가?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-마무리&lt;/p&gt;
&lt;p&gt;배웠기 때문에, 어딘가에 써먹으려고 안달해서는 안된다.&lt;/p&gt;
&lt;p&gt;대부분 무언가 가르치는 책은 절대 객관적이지 않기 때문에. 장점과 단점도 그 저자의 시야에서만 본 것이기 때문에.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;테크닉을 많이 알지만, 절제할 줄&amp;nbsp;알고 누군가 그것을 잘못 남용할때 지적해 줄 수 있는&amp;nbsp;사람이 되어야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #ff0000; FONT-SIZE: 18px&quot;&gt;5. 시야, 당신의 true가 그들에게 true가 될 수 없는 이유&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로그래머들은 자기들 입장에서 정직하고 원칙대로 일한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;몇가지 책들이 소프트웨어 개발을 이해하지 못하는 관리자나 외부팀에 대한&lt;br  /&gt;불신과 저항에 초점을 맞추고 있는데, 이런것들이 개발자를 더 무능력하게 만드는 것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그들은 소프트웨어 개발을 이해하고 있지 못하는것이 맞지만,&lt;br  /&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffa700; COLOR: #ffffff&quot;&gt;우리 또한 그들을 이해하고 있지 못하다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;경력이 적은 개발자들의 시야는 오직 프로그래밍적인 구현에 집중되어있다.&lt;br  /&gt;프로그래머뿐만 아니라, 게임을 만드는데 관련된 모든사람은 서로의 입장을 알아야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;우리는 모든 기능이 순차적으로 구현되어야 한다는 생각을 버려야 한다.&lt;br  /&gt;기획자나 디자이너는 순서를 건너뛴 어떤것을 먼저 봐야만 다음 일을 진행할 수 있는 경우가 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;돈을 벌어본 퍼블리셔의 사업팀은 일반적으로 기획자보다 &apos;대중&apos;이 원하는것이 무엇인지 잘 안다.&lt;br  /&gt;개발자들이 보기에 말도 안되는 가격으로 유료화 정책을 세워도 잘 팔린다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어떤 기능에 버그가 있어서 고치고 있는데, 몇일 후에 외부사람들이 와서 구경할거니까&lt;br  /&gt;일단 다른 기능부터 만들어달라고 하면 프로그래머는 짜증이 난다.&lt;br  /&gt;&quot;버그가 안된 상태로 프로그램을 보여주는건 원칙이 아닙니다. 안됩니다&quot; 말해서는 안된다.&lt;br  /&gt;그 외부 사람들은 당신의 월급을 주는 사람일 수 있다.&lt;br  /&gt;이럴때 하드코딩을 하자.&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서비스 경력이 오래된 프로그래머들은 매 구현마다 방법을 선택하는데 있어서 매우 보수적이다.&lt;br  /&gt;그것이 효율적이지 않더라도 한번 검증된 방법이라면 그것을 택한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;검증되었다는것은 서비스를 한번 마치고 돈까지 벌어본 코드를 의미한다.&lt;br  /&gt;어떤 예외에도 대처가 된 코드이며 일정에 가변적인 영향을 미치지 않는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;게임을 완성하기까지 그 &apos;구현&apos;이라는것이 엄청나게 많다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;상당히 많은 개개의 기능들이 유기적으로 작동하는것이 게임인데,&lt;br  /&gt;그중 부분적인 기능에 새로운 구현을 적용할 경우 연동되는것에도 사이드 이펙트를 미칠 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;이미 검증된 구현으로 게임을 구현할 경우 어떠한 문제가 생기면&lt;br  /&gt;대부분의 경우 그것은 실수로 빠뜨렸기 때문인 것일뿐, 고려를 안해서 발생한것이 아니다.&lt;br  /&gt;실수로 빠뜨린것은 코드수준의 실수이며, 고려를 안한것은 설계상의 실수가 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;설계에러는 코드수준의 에러보다 훨씬 심각하고 리스크가 크다.&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;게임회사를 다니는 모든 사람이 당신만큼 일을 사랑한다고 생각해서는 안된다.&lt;br  /&gt;그들은 자신의 생활과 가정이 있고, 퇴근후에 친구를 만나야 하고, 애인과 데이트를 해야한다.&lt;br  /&gt;어영부영 살다가 &apos;그냥&apos; 회사를 다니는 사람도 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;프로그래머들은 아닌것은 아니라고 이야기 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;하지만 그들은 말해서 상대의 기분이 상하거나, 자신의 적을 만들게 되거나,&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;말해도 고쳐지지 않고 상황만 나빠지는 진실은 이야기 하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그들은 자신의 목이 중요하지, 옳고 그름이나 프로젝트가 더 중요한건 아니기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;당신이 함께 일하는 그들은 감정과 자존심, 부양해야할 가족을 가진 직위와 연봉을 지켜야 하는 &lt;strong&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffffff; COLOR: #ff6c00&quot;&gt;사람&lt;/span&gt;&lt;/strong&gt;이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;당신의 true는 그들에게 true가 아니다.&lt;/span&gt;&lt;/strong&gt;&lt;br  /&gt;&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Wed, 24 Mar 2010 05:22:46 +0900</pubDate>
                                    <slash:comments>12</slash:comments>
                    </item>
                <item>
            <title>=날림팁/유틸= 간단히 윈도우 플랫폼에 SVN 서버 설치, 설정하는 법 (svn:// 주소로, 아파치 httpd 무관)</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=450</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=450</guid>
                        <comments>http://magicpotato.com/?document_srl=450#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;VisualSVN은 뭔가 나랑 안맞는것 같아...&lt;br  /&gt;기본적으로 svn 클라이언트를 사용해 보고 저장소의 개념이 있는 사용자를 위한 메모.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;1. 다운받기&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;아파치 버전은 전혀 상관 없기때문에 아무거나 받으면 된다.&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&amp;nbsp;- &lt;a href=&quot;http://subversion.apache.org/packages.html&quot;&gt;http://subversion.apache.org/packages.html&lt;/a&gt; : 플랫폼별 URL&lt;br  /&gt;&amp;nbsp;- &lt;a href=&quot;http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100&quot;&gt;http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100&lt;/a&gt; : 아파치 2.2.x호환&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- Setup-Subversion-1.5.6.msi 같은걸 하나 받고 &lt;strong&gt;막&lt;/strong&gt; 설치한다.&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;2. 저장소 만들기&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&amp;nbsp;저장소는 아무데나 만들어도 되며, svnserv.exe 실행시 경로를 지정할 수 있다. &amp;nbsp;Subversion을 설치하면 이미 클라이언트와 서버가 모두 설치된 상태이며,&lt;br  /&gt;&amp;nbsp;이것들을 어느 경로에서나 사용할 수 있도록 PATH설정까지 완료된 상태이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;2.1) 저장소를 위한 빈 폴더를 생성.&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;d:\svn_rep01&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&amp;nbsp;2.2) 저장소의 조건을 갖추는 폴더트리를 생성.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;/span&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;strong&gt;svnadmin create d:\svn_rep01&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;br  /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;&lt;strong&gt;3. SVN 서버 실행 및 저장소 지정&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;strong&gt;&amp;nbsp;3.way1) 서버실행법 : 서버주소(또는 ip)에 곧바로 저장소를 연결할 경우&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;svnserv -d -r d:\svn_rep01&lt;br  /&gt;&lt;/strong&gt;&amp;nbsp;&amp;gt; 저장소 주소는 svn://localhost/ 가 된다.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;br  /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;strong&gt;&amp;nbsp;3.way2) 서버실행법 : 서버주소(또는 ip)에 저장소를 연결할 경우&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;svnserv -d -r d:\&lt;br  /&gt;&amp;nbsp;&lt;/strong&gt;&amp;gt; 저장소 주소는 svn://localhost/svn_rep01 이 된다.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;br  /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #009e25&quot;&gt;&lt;strong&gt;&amp;nbsp;* 서비스 등록방법&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #009e25&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;sc create SVN-SERVER binPath= &quot;[svnpath]\svnserv --service -r d:\svn_rep01&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;gt; binPath= 와 &quot; 사이에 반드시 공백을 넣어줘야 한다.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;&lt;strong&gt;4. 권한 설정&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;각 저장소의 conf 폴더마다 3개의 파일&lt;/span&gt;이 있는데, 이것으로 id/pass, 폴더별 권한을 설정한다.&lt;br  /&gt;&amp;nbsp;d:\svn_rep01\conf\밑의 3개 파일을 메모장으로 직접 열어서 살펴보면 어떻게 하는지 다 나와있다.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;br  /&gt;&lt;strong&gt;끝.&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Sun, 07 Mar 2010 23:03:50 +0900</pubDate>
                                </item>
                <item>
            <title>=팁/문서화= 슈도코드로 시퀀스 다이어그램을 그려주는 사이트 (코드로 비지오 퀄리티 출력)</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=433</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=433</guid>
                        <comments>http://magicpotato.com/?document_srl=433#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;아 존내짱&lt;/p&gt;
&lt;p&gt;2009년 3월 26일에 알고 지금 알려준 이근영은 반성하라&lt;/p&gt;
&lt;p&gt;오늘 버스 돌아줘야함&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;이렇게 코드를 넣고 돌리면&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: cpp;&quot;&gt;alt 동일한 작업에 대한 병렬 처리
&amp;nbsp;&amp;nbsp;&amp;nbsp; ThreadManager-&amp;gt;Thread: 생성 요청
&amp;nbsp;&amp;nbsp;&amp;nbsp; note right of Thread: Thread 생성
&amp;nbsp;&amp;nbsp;&amp;nbsp; note right of Thread: Thread 작업 완료
&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread--&amp;gt;ThreadManager: 종료 대기
else 별도의 작업에 대한 이벤트 드리븐 처리
&amp;nbsp;&amp;nbsp;&amp;nbsp; ThreadManager-&amp;gt;Thread: 생성 요청
&amp;nbsp;&amp;nbsp;&amp;nbsp; note right of Thread: Thread생성
&amp;nbsp;&amp;nbsp;&amp;nbsp; note right of Thread: Thread Event 발생
&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread--&amp;gt;ThreadManager: Callback Function 호출
end&lt;/pre&gt;&lt;br  /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 나옴&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/433/websequencediagrams.png&quot; alt=&quot;websequencediagrams.png&quot; title=&quot;websequencediagrams.png&quot; class=&quot;iePngFix&quot; width=&quot;440&quot; height=&quot;566&quot; style=&quot;&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;흐어 ㅜ.ㅜ&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;링크 : &lt;a href=&quot;http://www.websequencediagrams.com/&quot; target=&quot;_blank&quot;&gt;http://www.websequencediagrams.com&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Fri, 26 Feb 2010 11:40:41 +0900</pubDate>
                                </item>
                <item>
            <title>=도서/목차= Mastering Unreal Technology TOC (Volume1~3) 전권목차</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=420</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=420</guid>
                        <comments>http://magicpotato.com/?document_srl=420#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;blockquote class=&quot;q4&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 32px&quot;&gt;&amp;nbsp;Volume1 : A Beginners Guide to Level Design in Unreal Engine 3&lt;/span&gt;&lt;/strong&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;CHAPTER 1: &lt;/b&gt;&lt;b&gt;Introduction to Unreal Technology &lt;/b&gt;&lt;b&gt;. . . &amp;nbsp;&lt;/b&gt;&lt;b&gt;1&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;History of Unreal . . . &amp;nbsp;2&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; June 1998: Unreal . . . &amp;nbsp;2&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; November 1999: Unreal Tournament . . . 3&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; March—July 2001: The Unreal Developer Network . . . &amp;nbsp;5&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; September 2002: Unreal Championship and Unreal Tournament 2003. . . 5&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; February 2003: Unreal II . . . 7&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; March 2004: Unreal Tournament 2004 . . . 9&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; April 2005: Unreal Championship 2: The Liandri Conflict . . . &amp;nbsp;10&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; November 2006: Gears of War. . . 11&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; November 2007: Unreal Tournament 3 . . . 12&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Overview of the Unreal Engine. . . 14&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Unreal Engine Components . . . 14&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Graphics Engine. . . 14&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Sound Engine. . . 15&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Physics Engine . . . 16&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Input Manager . . . 16&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Network Infrastructure . . . 17&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The UnrealScript Interpreter. . . 18&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Overview of Component Interaction . . . 18&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Engine Components at Work . . . 20&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Creating Your Own Worlds with the Unreal Engine . . . 21&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Game Assets . . . 21&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Animations and Skeletal Meshes . . . 25&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Tools of the Trade . . . 26&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 2: &lt;/b&gt;&lt;b&gt;Overview of Game Development&lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;31&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Importance of Iteration . . . 32&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Start with the Idea . . . 32&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Story Treatment . . . 34&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Considerations for Production Scheduling . . . 39&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Communication . . . 41&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Have Regular Meetings . . . 41&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Make Yourself Heard. . . . &amp;nbsp;41&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Respect Your Teammates . . . 41&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Artists Versus Programmers: Round One, Fight! . . . 42&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pick Your Battles . . . 42&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stay Creative . . . 42&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Testing and Feedback . . . 43&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Ending Production . . . 44&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 3: &lt;/b&gt;&lt;b&gt;Up and Running: A Hands-On Level Creation Primer&lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;45&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Starting Your First Level . . . 46&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 4: &lt;/b&gt;&lt;b&gt;A Universe of Brushes: World Geometry In-Depth &lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;117&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Key Terms and Concepts: BSP and CSG . . . 117&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Brush Types . . . 118&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Red Builder Brush. . . 118&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Additive Brushes . . . 118&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Subtractive Brushes . . . 120&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;A Quick Word on Building. . . 120&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Cleaning BSP Materials . . . 21&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Working with Brushes . . . 124&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Additive and Subtractive Levels. . . 124&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Almighty Drag Grid . . . 124&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Moving with Pivots . . . 125&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Brush Order . . . 125&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Building to the Proper Scale . . . 126&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Primitives . . . 127&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cube . . . 127&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cone . . . 128&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cylinder . . . 128&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sheet . . . 130&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tetrahedron (Sphere) . . . 130&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Curved Staircase . . . 130&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Linear Staircase . . . 132&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Spiral Staircase . . . 132&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Volumetric . . . 133&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Boolean Operations . . . 134&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Intersect Tool. . . 134&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; De-Intersect Tool . . . 135&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Brush Solidity. . . 135&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Solid . . . 136&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Semi-Solid. . . 136&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Non-Solid . . . 136&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Brush Manipulation . . . 137&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Geometry Mode . . . 137&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Selection Modes . . . 138&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Toggle Modifier Window . . . 141&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Working with Shadows. . . 164&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 5: &lt;/b&gt;&lt;b&gt;Static Meshes&lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;169&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Importance of Static Meshes. . . 169&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Static Mesh Workflow Overview . . . 170&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;UV Texture Coordinates . . . 185&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Considerations When Creating UV Layouts . . . 193&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Creating Textures . . . 195&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Importing Static Meshes. . . 197&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Using the Static Mesh Editor . . . 200&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Collisions . . . 202&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Creating Custom Collisions. . . 205&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Placing Static Meshes. . . 213&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Static Meshes and Shadows. . . 216&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 6: &lt;/b&gt;&lt;b&gt;Introduction to Materials&lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;221&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;What Is a Material? . . . 222&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Materials vs. Textures. . . . . 223&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Texture Coordinates (UVs). . . . 223&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Material Instructions. . . 224&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Thinking About Color in Unreal. . . 225&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;A Quick Word on Lighting. . . 226&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Anatomy of a Material . . . 226&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Material Nodes . . . 227&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Material Channels . . . 232&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Material Expressions. . . 239&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Available Material Expressions. . . 244&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Material Expressions List. . . 244&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Parameter Expressions. . . 262&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Material Creation. . . 264&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Surface Properties . . . 274&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Surface Properties Dialog. . . 275&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 7: &lt;/b&gt;&lt;b&gt;Introduction to Lighting &lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;357&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Light Placement. . . . 358&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;A Word on Building Lights. . . 358&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Lighting Concepts . . . 375&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Light Maps and Shadow Maps. . . 375&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static and Dynamic Lighting . . . 376&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Per-Vertex Lighting and Lighting Subdivisions. . . 377&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Types of Lights. . . 378&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Toggleable Lights. . . 378&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Moveable Lights . . . 378&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point Lights. . . 379&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Spotlights . . . 380&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Directional Lights. . . . 382&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SkyLights. . . 382&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pickup Lights. . . 384&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Light Properties . . . 387&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; General Properties. . . 387&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exclusive SpotLight Properties. . . 389&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exclusive DirectionalLight Properties. . . 389&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exclusive SkyLight Properties . . . 389&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Lighting Channels . . . 390&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Lighting Volumes . . . 394&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Shadows . . . . . 394&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Precomputed Shadows (Shadow Maps). . . . 395&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Shadow Buffer Shadows . . . 396&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Shadow Volume Shadows . . . 396&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Shadow Modulation . . . 398&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Light Environments . . . 405&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Light Functions . . . 410&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Workflow Tips . . . 415&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 8: &lt;/b&gt;&lt;b&gt;Terrain&lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;417&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;What Is Terrain? . . . 417&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Accessing Terrain . . . 419&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Terrain Anatomy and Properties . . . 427&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Terrain Anatomy (Terminology) . . . 427&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Terrain Properties . . . 428&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;TerrainMaterials and Layers . . . 433&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TerrainMaterial Properties. . . 433&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Terrain Layers . . . 434&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Terrain Editor Dialog. . . 449&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Terrain Editing Dialog Interface Overview. . . 449&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Terrain Editing Tools. . . 459&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Decorating Your Terrain: Foliage and DecoLayers. . . 483&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Foliage. . . 484&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DecoLayers. . . 488&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Terrain Workflow Considerations . . . 494&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 9: &lt;/b&gt;&lt;b&gt;Introduction to Unreal Kismet &lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;497&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Kismet: The Big Picture. . . 497&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Accessing Kismet . . . 498&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Anatomy of a Sequence Object . . . 506&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Types of Sequence Objects . . . 508&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Events . . . 508&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Actions . . . 509&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Variables . . . 509&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Conditions . . . 510&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matinee . . . 512&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Kismet Sequence Flow . . . 512&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Simple Kismet Sequences . . . 526&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Commenting Kismet Sequences . . . 535&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Intermediate Kismet Sequences . . . 536&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 10: &lt;/b&gt;&lt;b&gt;Unreal Matinee&lt;/b&gt;. . . &lt;b&gt;615&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;What Is Matinee? . . . 615&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Matinee Terminology . . . 616&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Accessing Matinee . . . 636&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Matinee Sequence Object . . . 636&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inputs . . . 637&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Outputs. . . . 638&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Variable Links . . . 638&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Properties . . . 638&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matinee Data Object. . . 640&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;InterpActors . . . 641&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Mover Kismet Event . . . 641&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Matinee Editor . . . 643&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Toolbar . . . 644&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Curve Editor . . . 644&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Group/Track List . . . 644&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Timeline . . . 645&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Properties . . . 646&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Types of Tracks. . . 647&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Anim Control . . . 647&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Color Property . . . 648&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Event . . . 648&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FaceFX . . . 648&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Float Material Param. . . 648&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Float Particle Param. . . 649&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Float Property . . . 649&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Morph Weight. . . 649&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Movement. . . 649&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SkelControl Scale . . . 650&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sound . . . 650&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Effects Toggle . . . 651&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Vector Material Param. . . . 651&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Vector Property . . . 651&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Director Group-Specific Tracks . . . 651&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Matinee Considerations . . . 652&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 11: &lt;/b&gt;&lt;b&gt;Level Optimization &lt;/b&gt;. . . &lt;b&gt;705&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;General Optimization. . . 705&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Understanding Overhead . . . 706&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;In-Game Performance Diagnostics . . . 706&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Occlusion . . . 717&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;CullDistance and CullDistanceVolumes . . . 718&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Levels of Detail . . . 719&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Optimizing Lights and Shadows . . . 719&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Light Maps . . . 719&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Light Environments. . . 720&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Light Functions . . . 720&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Casting Light onto Unlit Materials . . . 720&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Primitive Stats Browser. . . 721&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Dynamic Shadows and the Dynamic Shadow Stats Browser . . . 722&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Material Optimization . . . 725&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Multiple Materials per Object . . . 726&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Material Instructions. . . 726&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unlit Translucency . . . 727&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 12: &lt;/b&gt;&lt;b&gt;Level Streaming&lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;731&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Level Streaming Benefits. . . 732&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Testing Level Streaming . . . 733&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Streaming Methods . . . 733&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Persistent Levels Versus Streaming Levels . . . 733&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Level Browser and Scene Manager . . . 734&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Map Changing . . . 736&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Level Streaming via Kismet. . . 757&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Level Streaming via LevelStreamingVolumes. . . 758&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Level Streaming via Distance. . . 767&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Troubleshooting . . . 777&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Level Streaming Considerations . . . 777&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;APPENDIX A: &lt;/b&gt;&lt;b&gt;The Unreal Editor User’s Guide&lt;/b&gt;&lt;b&gt;. . . &lt;/b&gt;&lt;b&gt;779&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Main Menubar . . . 779&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Toolbar . . . &amp;nbsp;781&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File Options . . . 781&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Undo and Redo . . . 782&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Far Clipping Plane Distance . . . 782&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transform Tools . . . 782&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Search for Actor . . . 783&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Toggle Fullscreen . . . 783&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cut, Copy, and Paste . . . 783&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Generic Browser . . . 783&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kismet . . . 783&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Toggle Brush Polys . . . 783&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Toggle Prefab Lock . . . 783&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Use Curves Button . . . 783&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Enable/Disable Socket Snapping. . . 783&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Building . . . 784&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Play Level Area . . . 784&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Toolbox . . . 785&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Camera and Utilities Area . . . 785&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Brush Primitives Area . . . 786&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CSG Operations Area . . . 792&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Additional Brushes Area . . . 793&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Selections Area . . . 794&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Viewports . . . 795&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Navigation . . . 796&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Viewport Controls. . . 797&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Viewport Toolbar . . . 798&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Viewport Context Menu. . . 802&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Console Bar . . . 804&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Command Line . . . 805&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Selection Status . . . 805&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transform Status . . . 805&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DrawScale Numeric Fields . . . 805&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Drag Grid . . . 805&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rotation Grid . . . 805&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scale Grid . . . 806&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoSave . . . 806&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Browsers . . . 806&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Generic Browser. . . 806&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Actor Classes Browser. . . 811&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Groups Browser . . . 813&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Level Browser . . . 815&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Referenced Assets Browser . . . 816&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Primitive Stats Browser . . . 818&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dynamic Shadow Stats Browser. . . 819&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scene Manager . . . 820&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log . . . 822&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Editors . . . 823&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static Mesh Editor. . . 823&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Material Editor. . . 824&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kismet Visual Scripting Editor. . . 824&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matinee Editor . . . 826&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PhAT (Physics Asset Tool) Physics Editor. . . 826&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cascade Particle System Editor . . . 826&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; User Interface Scene Editor . . . 828&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SoundCue Editor . . . 828&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Post Process Manager . . . 828&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnimSet Editor . . . 830&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnimTree Editor. . . 830&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Search for Actors . . . 831&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Property Windows . . . 832&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Actor Properties . . . 832&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Surface Properties . . . 833&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;APPENDIX B: &lt;/b&gt;&lt;b&gt;The Curve Editor&lt;/b&gt;. . . &lt;b&gt;835&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Animation Curves . . . 836&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Controlling Interpolation Curves . . . 838&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Auto . . . 839&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;User . . . 840&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Break. . . . 840&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Linear. . . 840&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Constant . . . 842&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Curve Editor Interface. . . 842&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Curve Editor Toolbar. . . 842&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Curve Editor Curve Key List. . . 844&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Curve Editor Graph View . . . 846&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Preset Curves . . . 847&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Available Preset Curve Settings. . . 848&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;Index&lt;/b&gt;. . . &lt;b&gt;851&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q4&quot;&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;span style=&quot;FONT-SIZE: 32px&quot;&gt;&lt;strong&gt;Volume2 : Advanced Level Design Concepts with Unreal Engine 3&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 1: Introduction to Advanced Level Design . . . &amp;nbsp;1&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Who Is This Book For? . . . &amp;nbsp;2&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;What Should You Know Before You Start? . . . &amp;nbsp;2&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;What We Mean By “Advanced” Level Design . . . &amp;nbsp;3&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Included Assets and Game Assets . . . &amp;nbsp;3&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Working with INI Files . . . &amp;nbsp;4&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Future Software Changes . . . &amp;nbsp;5&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 2: Advanced Material Construction . . . &amp;nbsp;7&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Material Instancing and Parameters . . . &amp;nbsp;7&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Blending . . . 9&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;UV Manipulation . . . &amp;nbsp;10&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Normals . . . &amp;nbsp;11&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Depth . . . &amp;nbsp;12&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Special Lighting . . . 13&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Reflections . . . &amp;nbsp;14&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Distortion . . . &amp;nbsp;14&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Transparency . . . &amp;nbsp;15&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Subsurface Scattering . . . &amp;nbsp;16&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Custom Lighting Models . . . &amp;nbsp;16&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Summary . . . &amp;nbsp;151&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 3: Working with Volumes . . . &amp;nbsp;153&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Available Volume Types . . . &amp;nbsp;154&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Basic Volume Properties . . . &amp;nbsp;156&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;BlockingVolumes . . . &amp;nbsp;156&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;PhysicsVolumes . . . &amp;nbsp;&amp;nbsp;159&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;TriggerVolume . . . &amp;nbsp;170&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;PostProcessVolume . . . &amp;nbsp;&amp;nbsp;186&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;LevelStreamingVolume . . . &amp;nbsp;&amp;nbsp;188&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;LightVolume . . . 188&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;ColorScaleVolume . . . 189&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;ReverbVolume . . . &amp;nbsp;189&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;RB_ForceFieldExcludeVolume . . . &amp;nbsp;190&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;UTAreaNamingVolume . . . &amp;nbsp;190&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;UTAutoCrouchVolume . . . &amp;nbsp;190&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;FoliageFactory . . . &amp;nbsp;190&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Summary . . . &amp;nbsp;192&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 4: Physics Objects . . . &amp;nbsp;193&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Types of Physics Objects . . . &amp;nbsp;193&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Concept of Rigid Bodies . . . &amp;nbsp;196&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Working with Rigid Bodies in Unreal . . . &amp;nbsp;197&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;KActors . . . &amp;nbsp;200&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;KAssets . . . &amp;nbsp;208&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Constraints . . . &amp;nbsp;211&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Physics Asset Tool (PhAT) . . . &amp;nbsp;229&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Cloth . . . &amp;nbsp;245&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Impulse and Force Actors . . . &amp;nbsp;252&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Physics-Specific Kismet Sequence Objects . . . &amp;nbsp;258&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Physical Materials . . . &amp;nbsp;263&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Summary . . . &amp;nbsp;268&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 5: Creating Special Effects with Particle Systems . . . &amp;nbsp;269&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Anatomy of a Particle System . . . &amp;nbsp;271&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;TypeData Modules . . . &amp;nbsp;283&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Modules . . . &amp;nbsp;286&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Cascade Particle System Editor . . . &amp;nbsp;293&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Particle-Specific Material Expressions . . . &amp;nbsp;301&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Types of Particle Modules . . . &amp;nbsp;312&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Beam Emitters . . . &amp;nbsp;356&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Mesh Emitters . . . &amp;nbsp;374&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Trail Emitters . . . &amp;nbsp;382&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Fluid Emitters . . . &amp;nbsp;393&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Levels of Detail . . . &amp;nbsp;397&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Emitter Actor . . . &amp;nbsp;406&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Modifying Particle Systems In-Game . . . &amp;nbsp;407&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Troubleshooting the Effect . . . &amp;nbsp;480&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Summary . . . &amp;nbsp;481&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 6: Creating User Interfaces . . . &amp;nbsp;483&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;UI Components . . . &amp;nbsp;483&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;UIs Versus HUDs . . . &amp;nbsp;484&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;UI Design Workflow Overview . . . &amp;nbsp;485&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The UI Scene Editor . . . &amp;nbsp;492&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The UI Widgets . . . &amp;nbsp;496&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Working with Widgets . . . &amp;nbsp;498&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Widgets States . . . &amp;nbsp;513&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Widget Navigation and the Focus Chain . . . &amp;nbsp;541&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Working with User Inputs . . . &amp;nbsp;543&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Data Stores . . . &amp;nbsp;548&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Styles and Skins . . . &amp;nbsp;549&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Fonts . . . &amp;nbsp;566&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Adding Functionality . . . &amp;nbsp;569&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Sounds . . . &amp;nbsp;598&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Creating HUDs . . . &amp;nbsp;600&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Summary . . . &amp;nbsp;601&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 7: Sound System . . . &amp;nbsp;603&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Sound Types . . . &amp;nbsp;604&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;USounds Versus SoundCues . . . &amp;nbsp;604&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The AmbientSound Actors . . . &amp;nbsp;612&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The SoundCue Editor . . . &amp;nbsp;613&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;SoundCue Nodes . . . &amp;nbsp;614&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Kismet Sound Actions . . . &amp;nbsp;632&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Working with Music . . . &amp;nbsp;638&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Working with MusicTrackBanks . . . &amp;nbsp;642&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Summary . . . &amp;nbsp;666&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 8: Post-Process Effects . . . &amp;nbsp;667&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Four Key Methods of Controlling Post-Processes . . . &amp;nbsp;668&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Accessing and Assigning PostProcessEffect Objects . . . &amp;nbsp;670&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Types of Post-Process Effects . . . &amp;nbsp;675&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Post-Process Editor . . . &amp;nbsp;681&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Controlling Post-Process Effects In-Game . . . &amp;nbsp;715&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Summary . . . &amp;nbsp;716&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 9: The Unreal Animation System . . . &amp;nbsp;717&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;The Unreal Animation System . . . &amp;nbsp;718&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Skeletal Animation . . . &amp;nbsp;723&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Morph Animation . . . &amp;nbsp;734&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;AnimSet Editor . . . &amp;nbsp;737&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Animation Blending . . . &amp;nbsp;753&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;AnimTree Editor . . . &amp;nbsp;754&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;AnimTree Editor Nodes . . . &amp;nbsp;770&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Morph Nodes . . . &amp;nbsp;796&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Facial Animation with FaceFX . . . &amp;nbsp;839&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;FaceFX Studio . . . &amp;nbsp;840&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;FaceFX Studio User Interface . . . &amp;nbsp;872&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Physical Animation . . . &amp;nbsp;900&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Setup Procedure for Physical Animation . . . &amp;nbsp;906&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Skeletal Mesh Actors . . . &amp;nbsp;907&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Skeletal Mesh Component . . . &amp;nbsp;907&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Summary . . . &amp;nbsp;909&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;CHAPTER 10: Creating Cinematic Sequences . . . &amp;nbsp;911&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Cinematic Sequences . . . &amp;nbsp;911&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Camera Actor . . . &amp;nbsp;915&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Camera Effects . . . &amp;nbsp;916&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Image Separation Through Lighting . . . &amp;nbsp;920&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;DumpMovie Command . . . &amp;nbsp;920&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Putting It All Together . . . &amp;nbsp;920&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Summary . . . &amp;nbsp;999&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;APPENDIX A: Distributions . . . &amp;nbsp;1001&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Overview . . . &amp;nbsp;1001&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Distribution Types In-Depth . . . &amp;nbsp;1003&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;General Performance Cost Comparison . . . &amp;nbsp;1019&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;b&gt;APPENDIX B: The Curve Editor . . . &amp;nbsp;1023&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Animation Curves . . . &amp;nbsp;1024&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Controlling Interpolation Curves . . . &amp;nbsp;1026&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Curve Editor Interface . . . &amp;nbsp;1030&lt;/p&gt;
&lt;p&gt;Preset Curves . . . &amp;nbsp;1035&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Index . . . &amp;nbsp;1039&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q4&quot;&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 32px&quot;&gt;Volume3 : Introduction to Unrealscript with Unreal Engine 3&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;1. Introduction to UnrealScript&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;2. UnrealScript Baptism By Fire&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;3. Classes&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;4. Variables&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;5. Operators and Expressions&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;6. Functions&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;7. Control Statements&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;8. Loops&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;9. UnrealScript PreProcessor&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;10. Iterators&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;11. States&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;12. Delegates&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;13. Interfaces&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;14. Replication&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Appendix A. Setting Up Your Coding Environment&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Appendix B. Object Oriented Programming and UnrealScript&lt;/p&gt;
&lt;p style=&quot;MARGIN: 0px&quot;&gt;Appendix C. Building a Foundation in Unreal&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Tue, 23 Feb 2010 10:51:47 +0900</pubDate>
                                    <slash:comments>4</slash:comments>
                    </item>
                <item>
            <title>=팁/VC++= strncpy()와 strncpy_s()에 대한 오해 + snprintf_s() VC8.0 버그 (_TRUNCATE)</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=417</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=417</guid>
                        <comments>http://magicpotato.com/?document_srl=417#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;2008.04.01.명국진(&lt;/span&gt;&lt;a href=&quot;http://magicpotato.com/&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;font color=&quot;#810081&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;http://magicpotato.com&lt;/span&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;)&lt;br  /&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy()는 복사되었으면 하는 문자열의 길이를 넘어서지 않게 복사해 준다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;그리고 대상 버퍼를 넘어서게 되면 NULL로 끝나지 않는 문자열까지 복사하게 된다. 예를 들면 아래와 같다.&lt;/span&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy(dest, 8, &quot;1234567&quot;); // dest == { &apos;1&apos;, &apos;2&apos;, &apos;3&apos;, &apos;4&apos;, &apos;5&apos;, &apos;6&apos;, &apos;7&apos;, NULL }&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy(dest, 8, &quot;12345678&quot;); // dest == { &apos;1&apos;, &apos;2&apos;, &apos;3&apos;, &apos;4&apos;, &apos;5&apos;, &apos;6&apos;, &apos;7&apos;, &apos;8&apos; }&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy_s() 는 대상 버퍼가 실제 수용가능한 크기와 복사되었으면 하는 문자열의 길이 두가지를 넘긴다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy()와 strncpy_s()의 다른점이 있다면 strncpy_s()는 &apos;복사 되었으면 하는 문자열의 길이&apos;를 넘어서서 복사를 할 때 마지막을 항상 NULL로 끝나게 해준다는 점이다.&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;다음과 같은 코드는 런타임 에러를 발생시킨다.&lt;/span&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;// 이 코드는 buf에 1, 2, 3, 4, 5, 6, 7, 8, NULL .. 총 9개의 문자열을 넣으려다가 에러가 나게 된다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;char dest[8];&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy_s(buf, _countof(buf), &quot;123456789000&quot;, _countof(buf));&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;따라서 strncpy_s()를 사용할 때는 버퍼 크기와, 복사하고 싶은 길이를 다르게 주어야 한다.&lt;/span&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;char dest[8];&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy_s(buf, _countof(buf), &quot;123456789000&quot;, _countof(buf)-1);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;참고.&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strcpy_s()를 사용하면 버퍼 크기를 넘어서는 데이터를 넘을 때&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;자동으로 막아준다고 착각하는 경우가 있다. (strncpy처럼)&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strcpy_s()에 넘기는 2번째 인자인 dest_size는 &apos;내가 이 정도까지만 복사하고싶다&apos;의 의미가 아니라&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&apos;여기 지정한 크기를 넘어서 복사하려고 하면 프로그램을 멈추고 에러창을 띄워라&apos; 의 의미로 보아야 한다.&lt;/span&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;// 이 코드는 이쁘게 dest에 1234567까지만 복사해 주는 것이 아닌, 프로그램을 뻗게 하는 코드다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;char dest[8];&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strcpy_s(dest, _countof(dest), &quot;123456789&quot;);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;연장해서 sprintf_s() 와 _snprintf_s() 에도 똑같이 적용된다.&lt;/span&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;sprintf_s(buf, _countof(buf), &quot;%s 1234567&quot;, &quot;1212&quot;); // 프로그램 오류를 내는 코드&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;_snprintf_s(buf, _countof(buf), _countof(buf), &quot;123456789%d&quot;, 121212); // strncpy_s()와 같은 이유로 오류를 내는 코드&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;_snprintf_s(buf, _countof(buf), _countof(buf)-1, &quot;1234567%d&quot;, 121212); // 정상적으로 작동하며, 이렇게 써야 하는 코드&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;* gpg의 비회원님의 내용 추가 - 보충 감사드립니다.&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy_s(), _snprintf_s() 함수의 복사하고 싶은 길이(size_t count)에 _TRUNCATE 를 넣으면 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;수용가능한 버퍼 크기(size_t sizeOfBuffer)에 지정한 값 -1 을 넣은것과 같게 동작한다.&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;다음 두개의 코드는 결과가 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy_s(buf, _countof(buf), &quot;123456789000&quot;, _countof(buf)-1);&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;strncpy_s(buf, _countof(buf), &quot;123456789000&quot;, _TRUNCATE);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;** _TRUNCATE와 관련한 버그 안내 (2008-04-02, VS2005 VC8.0.50727.762 - SP.050727.7600 기준)&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;다음 프로토타입을 갖는 함수에는 count에 _TRUNCATE를 사용해도 된다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&lt;strong&gt;int _snprintf_s( char *buffer, size_t sizeOfBuffer, size_t count, const char *format [, argument] ... );&lt;/strong&gt; &lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;다음 프로토타입을 갖는 함수의 count에 _TRUNCATE를 사용하면 스택이 깨진다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&lt;strong&gt;template &amp;lt;size_t&amp;gt; int _snprintf_s( char (&amp;amp;buffer)[size], size_t count, const char *format [, argument] ... ); // C++ only&lt;/strong&gt; &lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;템플릿버전에서는 내부적으로 매크로를 사용하고 있는데 sizeOfBuffer와 count값 두가지가 모두 -1 로 넘어가면서 코드 내부적으로 buffer[(size_t)-1] = NULL; 이라는 코드를 실행하면서 잘못된 메모리를 쓰게 된다.&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;** &lt;span style=&quot;COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;티벳의 독립을 지지하는 아이스닥&lt;/span&gt;&lt;/span&gt;님이 알려주신 버그 수정법&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;CRTDEFS.h 파일 열어서&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;모든 _Size를 _&lt;span style=&quot;COLOR: #ff0000&quot;&gt;SUCKS_MS&lt;/span&gt;_BUG_Size 등 다른 이름으로 수정하면 된다. (원작자 표현 존중)&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;다만, 자기 컴퓨터의 버그만 고쳐지는 것이므로 되도록 혼자 작업하는게 아니라면 우회해서 사용하는것이 좋겠다.&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;- 버그내용 설명&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;stdio.h의 매크로 선언부와 crtdefs.h의 매크로 내용 정의부의 인자이름 _Size가 서로 겹쳐서 발생하는 버그라고 한다.&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;[stdio.h]&lt;/span&gt;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(int, _snprintf_s, _vsnprintf_s, __out_bcount(_Size) char, _Dest, __in size_t, _Size, __in_z __format_string const char *,_Format)&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;[crtdefs.h]&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&lt;/span&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(_ReturnType, _FuncName, _VFuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;extern &quot;C++&quot; \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__pragma(warning(push)); \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__pragma(warning(disable: 4793)); \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template &amp;lt;size_t _Size&amp;gt; \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inline \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_ReturnType __CRTDECL _FuncName(_DstType (&amp;amp;_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, ...) \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;va_list _ArgList; \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_crt_va_start(_ArgList, _TArg2); \&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return _VFuncName(_Dst, _Size, _TArg1, _TArg2, _ArgList); \&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;끝. &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Tue, 16 Feb 2010 13:42:32 +0900</pubDate>
                                </item>
                <item>
            <title>=팁/루아= 한개의 lua_State기반에서 코루틴(lua_thread)마다 독립적인 전역환경을 갖게 하기</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=403</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=403</guid>
                        <comments>http://magicpotato.com/?document_srl=403#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: CourierNew&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: CourierNew&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;pre class=&quot;brush: vb;&quot;&gt;
--------------------------------------------------------------------------------
-- 2010-02-02. code by magicpotato, advice by sunshine
--------------------------------------------------------------------------------
-- 하나의 luaState로 함수 하나하나를 각각 독립적인 전역환경에서 실행하게 한다.
-- 게임서버에서 스테이지를 루아스크립트로 구현할 때 유용하다.
--------------------------------------------------------------------------------
local entireStageChunks = {}
--------------------------------------------------------------------------------
&amp;nbsp;
function LoadStageScript(filename)
&amp;nbsp;&amp;nbsp;&amp;nbsp; table.insert(entireStageChunks, loadfile(filename))
end
--------------------------------------------------------------------------------
&amp;nbsp;
&amp;nbsp;
-- 이 함수는 코루틴으로 생성된다.
function StartStage(stageFuncName)
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -- 독립환경 생성 및 오리지널 환경 복사(상속)
&amp;nbsp;&amp;nbsp;&amp;nbsp; local per_game_env = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; setmetatable(per_game_env, { __index = _G } )
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -- 미리 로드된 모든 스크립트의 새로운 독립환경 지정, 스크립트를 새 독립환경에 적재
&amp;nbsp;&amp;nbsp;&amp;nbsp; -- stageFuncName에 종속된 함수만 평가하는 최적화가 필요하다.
&amp;nbsp;&amp;nbsp;&amp;nbsp; for i = 1, table.maxn( entireStageChunks ) do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setfenv(entireStageChunks[i], per_game_env)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; entireStageChunks[i]()
&amp;nbsp;&amp;nbsp;&amp;nbsp; end
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -- 해당 스테이지의 스크립트 실행
&amp;nbsp;&amp;nbsp;&amp;nbsp; per_game_env[stageFuncName]()
end
--------------------------------------------------------------------------------&amp;nbsp; 



&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Tue, 02 Feb 2010 22:22:10 +0900</pubDate>
                                </item>
                <item>
            <title>=팁/코드= MS VC 전용 #pragma TODO 매크로 코드 (__pragma 사용)</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=398</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=398</guid>
                        <comments>http://magicpotato.com/?document_srl=398#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 굴림체&quot;&gt;해야 할 일을 컴파일할 때 보여주고, 더블 클릭하면&amp;nbsp;해당 위치로 이동하므로 주석으로 적어놓는것보다 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 굴림체&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 굴림체&quot;&gt;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/398/todo.jpg&quot; alt=&quot;todo.jpg&quot; title=&quot;todo.jpg&quot; width=&quot;850&quot; height=&quot;440&quot; style=&quot;&quot; /&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 굴림체&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 굴림체&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 굴림체&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 굴림체&quot;&gt;
&lt;pre class=&quot;brush: cpp;&quot;&gt;
&amp;nbsp;
//----------------------------------------------------------------------------------------
// MS-VC전용 TODO 매크로 구현 : #pragma TODO 식으로 구현하지 않아도 된다.
//----------------------------------------------------------------------------------------
#define __TOSTR__( x ) #x
#define __MTOSTR__( n ) __TOSTR__( n )
#define TODO(msg) __pragma(message(__FILE__&quot;(&quot; __MTOSTR__(__LINE__) &quot;) : TODO : &quot;msg ))
//----------------------------------------------------------------------------------------
&amp;nbsp;
void main(void)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TODO(&quot;오늘은 피자를 먹자&quot;)
}
&amp;nbsp;&lt;/pre&gt;&lt;br  /&gt;&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 굴림체&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Fri, 22 Jan 2010 18:16:42 +0900</pubDate>
                                    <slash:comments>2</slash:comments>
                    </item>
                <item>
            <title>=팁/디버깅= 소프트웨어 가시화와 예외처리의 중요성</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=393</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=393</guid>
                        <comments>http://magicpotato.com/?document_srl=393#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2010.01.22. ver2. 명국진(&lt;/span&gt;&lt;a href=&quot;http://magicpotato.com/&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;http://magicpotato.com&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;)&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;2002.12.11. ver1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;소프트웨어 가시화와 예외처리의 중요성&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;소프트웨어 가시화란 소프트웨어를 눈에 보이게 작성하는 것이다. (문서화가 아니다.)&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;쉽게 말하면 printf를 이용해서 프로그램이 어떻게 돌아가고 있는지 출력하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;일반적으로 2D Graphics를 비롯한 UI구현등은 프로그램 가시화에 신경쓰지 않아도&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;눈에 보이는 결과 자체가 프로그램의 올바른 작동 여부를 판단할 수 있다. (완전하진 않다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;예외처리란 올바르게 작동하길 기대한 것과 다른 상황이 발생했을 때 다른 조치를 취하는것을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;프로그램을 작성할 때 개발자는 여러가지를 의도한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;입력값의 범위나 선행조건, 그것이 처리되는 프로세스와 중간 결과값 및 결과처리의 형태, 후처리 등&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;따라서 &lt;span style=&quot;COLOR: #ff0000&quot;&gt;&quot;결과가 잘 나오는 것&quot;은 반드시 프로그램이 잘 돌아가는것을 의미하지 않는다&lt;/span&gt;.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;개발자가 의도한 중간과정을 포함한 모든 것을 만족해야 잘 돌아간다고 말할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;온라인게임에서 로그인을 구현한다고 해보자&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;로그인 요청이 매우 다양한 원인때문에 실패 또는 성공할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[성공] DB가 완료되지 않아 &lt;span style=&quot;COLOR: #ff0000&quot;&gt;임시로 return true를 한 코드에 의해 &apos;임시&apos; 로그인이 완료&lt;/span&gt; 되었다.(중복 로그인의 가능성)&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[성공] DB쿼리까지 제대로 들어가서 모든것이 정상처리되고 로그인이 완료되었다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[성공] (로그인정책) 기존에 접속된 유저가 있었으나 끊고, 로그인이 정상 완료되었다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[성공] &lt;span style=&quot;COLOR: #ff0000&quot;&gt;운영자 권한을 가진 계정으로 로그인 완료&lt;/span&gt; 되었다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[성공] password가 아닌 휴대폰 비밀번호 생성만을 이용해 로그인 되었다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[실패] ID를 찾을 수 없다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[실패] 패스워드가 틀렸다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[실패] 이전에 패스워드가 3회 틀려 홈페이지에서 주민번호 인증을 해야 한다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[실패] 해당 계정이 정지 또는 결제가 만료된 상태이다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[실패] (로그인정책) 이미 로그인된 유저가 있어서 로그인 실패.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[실패] 서버의 유저가 너무 많아 로그인 실패 (혹은 대기자 순번 발급)&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;[실패] 연동 서버(DB, 로그인 서버)가 맛이 가서 로그인 실패&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;로그인 요청의 결과는 쉽게 &apos;성공&apos; 또는 &apos;실패&apos;로 정할 수 있지만,&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;위의 모든 사례는 실제 실행되는 코드와 함수(물리적 exe)의 협력 순서(프로세스)가 모두 다르다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;특히 맨 처음의 &apos;임시 로그인&apos;과 &apos;운영자 권한 로그인&apos;은 서비스를 할 시점에는 무진장 중요한 내용이다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;로그인만 성공했다고 로그인 기능이 제대로 작동하고 있다고 말할 수 없는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;가시화에는 정도가 있는데, 어떤 요청으로부터 결과가 처리되기까지 거치는 모든 함수 이름을 출력할 수도 있고&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;각각의 함수의 if, else의 판단결과나 한줄한줄 처리할때마다 &apos;처리 들어간다&apos; &apos;처리가 어떻게 됐다&apos;를 출력할 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;위의 로그인 구현에서 말하고자 하는것은 2가지인데,&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;모든 상황에 대한 예외처리를 해야 한다는것과 그 예외처리의 과정을 적절히 가시화 해야 한다는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;제대로된 개발자들은 라이브러리를 만들 때 로그를 최우선적으로 개발한다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;이미 좋은 글이 있으므로 로그시스템에 대한 다른 글을 소개한다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://xevious7.com/142&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;http://xevious7.com/142&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt; : 로그시스템 (Log System)에 대한 고찰&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;실제 판매되고 서비스되는 제품을 개발할 때&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;핵심기능 구현을 하는 비용과 예외처리를 하는데 사용되는 비용은 큰 차이가 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;C/C++이나 윈도우 API, VisualC++같은 툴을 배우기 위한 서적의 학습용 코드는 예외처리가 거의 없다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;모든 코드가 제대로 처리된다는 가정으로 작성되어 있지만 실무코드는 if와 else의 떡칠이라고 보면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;구현을 했으면 성공하는 케이스만 테스트하는게 아니라 코딩한 모든 예외에 대한 코드들도 함께 테스트 해야 한다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;즉, 코딩한 모든 코드를 한번씩은 다 테스트 해야 한다는 뜻이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;브레이크 포인트를 잡아서 시행한 검증은 순간이기때문에&amp;nbsp;이것을 이용한 디버깅 습관은 갖지 않는것이 좋다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;이미 구현된 코드 근처에 다른 코드가 끼어들어도 이미 작성해 놓은 로그는 프로그램이 어떻게 돌아가는지 정확히 알려준다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;strong&gt;로그를 남기자!&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;프로그램 가시화, 로그, 예외처리등과 관계된 다른 키워드는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;- 로그 시스템&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;- ASSERT, VERIFY, RAISE&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;- 에러 리포팅 시스템&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;- 에러 핸들링&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;- 덤프 남기기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Gulim; FONT-SIZE: 14px&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;끝.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Fri, 22 Jan 2010 03:10:05 +0900</pubDate>
                                </item>
                <item>
            <title>=팁/3D지형= ROAM의 이해 : Realtime Optimally Adapting Meshes (2003)</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=376</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=376</guid>
                        <comments>http://magicpotato.com/?document_srl=376#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;*** 현재 ROAM은 실무에서 보편적으로 사용되고 있는 기술이 아닙니다. 공부를 위한 용도로만 사용 하시길 권장합니다. ***&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2003. 09. 29. 명국진 (&lt;a href=&quot;http://magicpotato.com/&quot;&gt;http://magicpotato.com&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 24px&quot;&gt;ROAM의 이해 : Realtime Optimally Adapting Meshes&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;ROAM 은 광범위한 지형을 효과적으로 표현하기 위한 3D 알고리즘/자료구조를 제시. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;본인은 g-Matrix(&lt;a href=&quot;http://www.g-matrix.pe.kr/&quot;&gt;www.g-matrix.pe.kr&lt;/a&gt;) 에서 ROAM &lt;span style=&quot;FONT-SIZE: 10px&quot;&gt;&lt;span style=&quot;FONT-SIZE: 12px&quot;&gt;번역글을 보고 공부했다&lt;/span&gt;&lt;/span&gt;. 해당 사이트의 원문은 3D에 관한 기반지식 요구수준이 높아서 3D 프로그래밍에 입문중인 본인이 이해하기에는 많은 시간이 필요했다. 또, 번역의 특정부분이 매끄럽지 못해, 여러번 생각해야 이해가 되었다. 따라서 좀더 쉽게 다른분들에게 도움이 되고자 이 문서를 작성한다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 문서는 ROAM에 관한것은 모두 인용/재구성 하였지만, 그 외의 기초정보나 사견은 제거하였으므로, 원문의 목적과 거리가 있을수 있다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;번역자인 이봉식님과 이해에 도움주신 손희승,박준태님께 감사드립니다. &lt;/p&gt;
&lt;p&gt;3D입문자가 작성한 것이므로, 틀린부분이 있다면 지적편지를 부탁 드립니다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;번역문 URL : &lt;a href=&quot;http://www.g-matrix.pe.kr/feature/3dengine/lod.htm&quot;&gt;http://www.g-matrix.pe.kr/feature/3dengine/lod.htm&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;&lt;strong&gt;차례&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;1. ROAM 이전의 LOD(Level of Detail) 알고리즘의 기초정보 &lt;br  /&gt;2. ROAM의 전체적인 내용을 이해하자. &lt;br  /&gt;3. 용어 설명 &lt;br  /&gt;4. 주요 동작 미리 보기 &lt;br  /&gt;5. LandScape, 패치, 삼각형의 구조설명 및 분할방식 안내 &lt;br  /&gt;6. 편차 &lt;br  /&gt;7. 번역문에 포함된 소스코드 가이드 &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;1. ROAM 이전의 LOD(Level of Detail) 알고리즘의 기초정보&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;이 문서를 작성하기 전에 보게된 Bryan Turner(번역/이봉식님)의 ROAM 글에는 3가지의 논문이 있다고 한다. (Hoppe논문, Lindstorm논문, Duchaineau논문) &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hoppe논문의 방법은 기초지형에 삼각형을 추가해 그리는 방법인듯 하며, Linestorm논문은 지형을 재귀적으로 분할하고 사용하기 위해 쿼드트리를 사용한다. Duchaineau논문은 2번째 개념과 비슷하나, 이진 삼각형트리(Binary Triangle Tree) 자료구조를 사용한다. 우리는 이 3번째 논문에 대한 것을 공부하는 것이다. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;2. ROAM의 전체적인 내용을 이해하자.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;ROAM 은 Realtime Optimally Adapting Meshes 의 약자로써, &apos;동적 매쉬 최적 조합&apos; 정도로 해석한다. &lt;/p&gt;
&lt;p&gt;3D 상에서 &apos;카메라&apos;의 위치에 따라서 폴리곤 정보를 동적으로 생성하는 기술이다. 카메라로부터 가까운 곳의 지형은 세밀하게 폴리곤을 많이 사용하고, 카메라에서 멀리 있는 곳의 지형은 대충대충 폴리곤을 적게 사용한다. &lt;/p&gt;
&lt;p&gt;이 방법을 사용하면 넓은 지형을 렌더링(그리기)하는데 자원을 적게 소모할수 있다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ROAM기법으로 폴리곤을 동적으로 생성할때 참조해야 하는 자료가 있다. 이것은 지형에 관한 정보를 갖고 있어야 하며, ROAM은 HeightMap 이라는 자료구조를 이용한다. (아래에 설명하였으니, 모르시는분은 먼저 이해하고 보십시오) &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ROAM을 실시간 렌더링에 이용할때 다음의 3가지 정보를 참고한다. &lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1) HeightMap 자료구조로 된 2차원 배열의 지형 높이값 정보 &lt;br  /&gt;2) ROAM 초기화시 구축되는 이진 삼각형 트리(BTT) 정보와 각 영역의 편차정보 &lt;br  /&gt;3) 2의 자료 비교될 카메라의 위치정보 &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;(2) 정보(이진삼각형트리)를 구축하고, 이용하는것이 ROAM의 핵심이다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;HeightMap자료를 적당한 척도로 분할하고, 분할된 각 영역(Patch)을 이진 삼각형 트리로 가상분할(데이터 구축이 아닌 참조분할?-차후설명)한다. &lt;/p&gt;
&lt;p&gt;즉, 큰 영역을 2개의 삼각형으로 쪼개고, 이 삼각형을 또 2개의 삼각형 으로 쪼개고, 프로그래머가 생각하는 레벨(깊이)까지 쪼갠다. &lt;/p&gt;
&lt;p&gt;렌더링 하는 순간, 이 쪼개진 영역이 카메라와 가까우면, 세밀하게 표현하기 위해 깊은 분할 영역까지 순회하며 폴리곤 정보를 생성하고, 그려야 하는 쪼개진 영역이 카메라와 멀면 깊이 들어가지 않고, 낮은 레벨의 정보만 참조해서 폴리곤 정보를 생성한다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것이 ROAM의 이론이며, 다음 단원에서 세부이론을 알아보겠다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q3&quot;&gt;&lt;strong&gt;참고: HeightMap (HeightMap/HeightField) 란 무엇인가?&lt;/strong&gt; 
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br  /&gt;3D공간상의 지형을 높이 정보들로 표현한 구조이다. &lt;/p&gt;
&lt;p&gt;실생활에서 볼수 있는 &apos;지도&apos;의 &apos;등고선&apos;을 적절히 바둑판 식으로 나눠서 색상이 진할수록(지형이 높을수록) 높은 숫자가 되고, 색상이 옅을수록(지형이 낮을수록) 낮은 숫자가 된다. &lt;/p&gt;
&lt;p&gt;게임공간상에서 가로/세로 크기가 1000px * 1000px 인 맵을 헤이트 맵 자료형으로 표현할 경우 10x10 의 디테일로 표현할수도 있고 100x100, 1000x1000 의 디테일로 표현할수가 있다. &lt;/p&gt;
&lt;p&gt;즉 하늘위에서 땅을 정면으로 내려다보고, 적당한 간격으로 자른다음, 잘라진 각 구역의 높이를 2차원 배열로 저장한 것이 헤이트 맵의 자료형이다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # 예시 데이터&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 좌측의 헤이트맵 자료형은&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;01&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;01&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;01&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 지형 한가운데에 모든 방향으로의 기울기가 같은&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;01&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ff0000&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #3a32c3; COLOR: #ffffff&quot;&gt;02&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;01&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 산 하나를 갖고 있는 자료형이다.&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;01&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;01&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ff6c00&quot;&gt;01&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt;&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffaa00&quot;&gt;00&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 해당 맵의 크기를 50x50 이라고 가정한다.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;위의 데이터를 기초로 폴리곤을 생성할때 각 점을 3D 좌표화 시킨다면.. (3x3 의 크기만을 좌표화 시켜보겠다. 순서대로 x,y,z 이며 z가 높이값이다) &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 공식 = x * SCALE, y * SCALE, z&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 x 50, 0 x 50, 00), (1 x 50, 0 x 50, 00), (2 x 50, 0 x 50, 00)&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 x 50, 1 x 50, 00), (1 x 50, 1 x 50, 01), (2 x 50, 1 x 50, 01)&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 x 50, 2 x 50, 00), (1 x 50, 2 x 50, 01), (2 x 50, 2 x 50, 02)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;해당 3D좌표들로 폴리곤을 구성하면 된다. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;3. 용어 설명&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;strong&gt;구역&lt;/strong&gt;&amp;nbsp; : 사각형 또는 삼각형의 개념적인 공간 (헤이트 맵을 덮는...) &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;패치&lt;/strong&gt;&amp;nbsp;: HeightMap을 2차원 배열로 나눈 조각중의 하나, 사각 구조 형태의 개념 공간 &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;삼각형&lt;/strong&gt;&amp;nbsp; : 3D에서 말하는 폴리곤이 아니며, 삼각형 개념의 분할된 공간을 뜻한다. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Landscape&lt;/strong&gt;&amp;nbsp; : 번역문에 포함된 소스내에 있는 클래스로써, 큰 지역 하나를 담당한다. 소스를 안봤다면, 그냥 전체를 의미한다고 생각하면 된다. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;4. 주요 동작 미리 보기&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;&lt;/span&gt;&lt;br  /&gt;&lt;/strong&gt;ROAM의 주요 동작은 3가지 인데 다음과 같다. &lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1) 각 구역에 대한 편차트리 (어디까지 분할을 할것인지 비교할 테이블) 구축 &lt;br  /&gt;2) 카메라와의 거리에 따라 작은 구역들을 알맞게 분할한다. &lt;br  /&gt;3) 그려야할 구역의 삼각형 트리를 순회하며 폴리곤을 생성해 낸다. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;각 구역과, 삼각형트리는 개념적인 구조이지, 직접적인 좌표 데이터가 아니다. 헤이트맵과 이 개념적 구조를 합쳐서 실제 폴리곤 데이터를 뽑아내는데, 우선은 개념적인 구조먼저 설명한 다음, 좌표를 만드는법을 배울것이다. &lt;/p&gt;
&lt;p&gt;하지만 어느정도 알고 봐야 이해가 되기때문에 대략적인 설명을 하겠다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;- 각 패치(나눠진 사각영역)는 자신이 HeightMap 내에서 어느 부분을 담당하는지 안다. &lt;br  /&gt;- 또, &apos;패치&apos;는 HeightMap 데이터에 대한 포인터를 갖고있다. &lt;br  /&gt;- 한개의 패치가 HeightMap에서 어느정도의 Width,Height를 담당하는지 상수등으로 정해져 있다. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;ROAM은 이런 근거에 기반해서 좌표를 생성한다. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;5. LandScape, 패치, 삼각형의 구조설명 및 분할방식 안내&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;번역문의 ROAM은 LandScape-패치-삼각형 의 개념으로 나뉘어서 구현되어있다. 이 구조들의 세부사항을 이해하면서 분할을 어떻게 하는지 알아본다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;LandScape 클래스의 주요 데이터 구조는 다음과 같다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1) HeightMap데이터에 대한 포인터 &lt;br  /&gt;2) HeightMap데이터를 특정 척도(SCALE)를 기준으로 잘라낸 2차원 배열의 Patch 클래스들 &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;본인이 ROAM을 처음 공부할때 작동구조가 다음과 같은줄 알았다. &lt;/p&gt;
&lt;p&gt;&amp;gt; HeightMap데이터인 맵을 큰 삼각형 2개로 나누고, 또 2개를 각각 2개로 나누고, 이것이 계속 재귀된다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만, 본인이 본 논문에서는 그 방법이 아니었다. &lt;/p&gt;
&lt;p&gt;&amp;gt; HeightMap데이터인 맵을 2차원 배열로 구역을 나눈다음, 그 구역을 이진 삼각형 트리로 나누고, 나누고, 나눈다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;논문에서는 이렇게 처음부터 이진삼각형 트리를 구축하는것이 아닌, 2차원 배열(Patch)로 구역을 등분한다음 삼각형 구조로 나누는데 그 이유는 2가지가 있다. &lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1) 삼각형이진트리는 그 트리가 깊어질수록 메모리 요구량이 지수적인 크기로 늘어난다. 따라서 구역화 하면, 이진트리 깊이가 줄어들기 때문에 그런것이다. &lt;br  /&gt;2) 높이맵을 동적갱신 할때 해당지역의 분할을 다시 해야하는데 트리구조가 깊은 경우에는 분할에 대한 계산을 하는데 시간이 오래 걸린다. 하지만, 작은 구역으로 여러개 나뉘어져 있다면, 필요한 구역 몇개만 계산하면 되고, 그 구역조차 작은 깊이로 트리를 구성하기 때문에 속도가 빠르다. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;각각 나뉘어지는 패치(Patch/전체맵중 한곳인 사각형 구역)는 2차원 배열이다. 이 패치는 x,y,z같은 좌표값을 갖지 않고, LandScape클래스의 HeightMap데이터를 참고한다. &lt;/p&gt;
&lt;p&gt;이번에는 작은 구역인 &apos;패치&apos;를 &apos;이진삼각형트리&apos;로 나누는것을 알아야 한다. 먼저 이진삼각형 트리 자료구조를 구성하는 삼각형 구조에 대해서 알아보자. &lt;/p&gt;
&lt;p&gt;다음을 숙지하고 이 부분을 살펴봐야 한다. &lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1) 전체맵을 2차원 배열 형식으로 구역분할 한것이 Patch 이다. &lt;br  /&gt;2) Patch는 작은 지역을 &apos;개념적&apos;으로 관리한다. &lt;br  /&gt;3) Patch는 &apos;사각형 영역&apos;을 의미한다. &lt;br  /&gt;4) Patch는 최소 2개의 &apos;삼각형 영역&apos;을 갖는다. &lt;br  /&gt;5) Patch가 갖는 2개의 &apos;삼각형 영역&apos;은 서로 이웃 관계가 된다. &lt;br  /&gt;6) 각 삼각형들은 2개의 자식으로 분할, 또한 재귀분할 할수 있다. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 &apos;삼각형 영역&apos; (Triangle Node)에 대해서 알아보겠다. 삼각형 영역을 줄여서 삼각형이라고 정의하며, 이 삼각형은 개념적인 값이며, 직접적인 x,y,z 와 관련된 값을 갖지 않는다. &lt;/p&gt;
&lt;p&gt;삼각형은 다음 구조체로 정의된다. &lt;/p&gt;
&lt;p&gt;삼각형 이진트리에 사용되는 삼각형 (영역 개념) 구조체 &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct TriTreeNode&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 　　　　 TriTreeNode *LeftChild;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Our Left child&lt;br  /&gt;&amp;nbsp; 　&amp;nbsp;&amp;nbsp; 　　　 TriTreeNode *RightChild;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Our Right child&lt;br  /&gt;&amp;nbsp; 　　&amp;nbsp;&amp;nbsp; 　　 TriTreeNode *BaseNeighbor;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Adjacent node, below us&lt;br  /&gt;&amp;nbsp; 　　　&amp;nbsp;&amp;nbsp; 　 TriTreeNode *LeftNeighbor;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Adjacent node, to our left&lt;br  /&gt;&amp;nbsp; 　　　　&amp;nbsp;&amp;nbsp;&amp;nbsp; TriTreeNode *RightNeighbor;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Adjacent node, to our right&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;패치(Patch/사각영역)가 반으로 나뉘면 역시 삼각형 두개가 되는데, 이것은 패치의 자식이라기보다는 왼쪽노드, 오른쪽 노드가 되며, 패치 바로 하부의 두개 삼각형은 서로 베이스 이웃(BaseNeighbor)이 된다. &lt;/p&gt;
&lt;p&gt;삼각형이 반으로 나뉘면 나뉜 2개는 나뉘기전 영역의 자식이 되고, 이 2개의 자식이 왼쪽,오른쪽 차일드(Left/Right Child)가 된다. &lt;/p&gt;
&lt;p&gt;자식,베이스이웃 관계 이외의 관계가 &apos;왼쪽이웃/오른쪽이웃&apos;이 되는데 이 왼쪽/오른쪽 이웃은 같은 패치안의 삼각형끼리 될수도 있고, 서로 다른 패치에 있는 삼각형간에 이루어 질수도 있다. &lt;/p&gt;
&lt;p&gt;자세한 내용은 다음 그림을 참고하라. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/376/r1.gif&quot; alt=&quot;r1.gif&quot; title=&quot;r1.gif&quot; width=&quot;402&quot; height=&quot;359&quot; style=&quot;&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;베이스 이웃, 양쪽자식에 대한 필요성은 알지만, 왼쪽,오른쪽 이웃의 필요성에 대해서 아직 알수가 없는 상태이다. &lt;/p&gt;
&lt;p&gt;이것은 폴리곤 생성중에 깨짐짐 현상을 해결하기 위한것인데, 본인은 왜 깨지는지만 설명하고, 자세한 해결법은 번역문을 참고하기 바란다. (다이아몬드에 대한 설명은 번역문을 봐도 난해하지 않을꺼라고 생각하기 때문이다) &lt;/p&gt;
&lt;p&gt;다음 그림을 참고하며 아래 설명글을 봐야 이해가 빠르다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/376/r2.gif&quot; alt=&quot;r2.gif&quot; title=&quot;r2.gif&quot; width=&quot;360&quot; height=&quot;260&quot; style=&quot;&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br  /&gt;서로 이웃인 삼각형 A 와 B 가 있다. &lt;/p&gt;
&lt;p&gt;A가 2단계 깊이까지 삼각형 이진트리를 구축하고, B는 구축하지 않는다면 A의 자식 삼각형 정보를 기준으로 폴리곤을 그릴때, B의 폴리곤과 높이가 맞지 않기때문에 중간이 붕 뜨게 된다. 따라서 다이아몬드라는 규칙을 사용해서 반대편도 같이 강제분할 해 주어야 한다. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;6. 편차&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br  /&gt;편차는 분할을 어디까지 할것인가를 결정할때 사용된다. 기존의 ROAM에서 그릴때는 사용되지 않는다. (본인의 입장은 그렇지 않다.) &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;편차를 이해하기 위해서는 삼각형의 구조체 대해서 분명히 알아야 한다. 삼각형은 4개의 기준점이 있는데 다음과 같다. (폴리곤 구성요소가 아니다) &lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;- Apex Point (삼각형의 상단 꼭지점의 x,y,z) &lt;br  /&gt;- Left Point (삼각형의 왼쪽 점의 x,y,z) &lt;br  /&gt;- Right Point (삼각형의 오른쪽 점의 x,y,z) &lt;br  /&gt;- Center Point (삼각형의 왼점,오른점 사이의 x,y,z - 상단 꼭지점 수직 아래) &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;편차는 Left Z + Right Z 를 2로 나눈값과 Center Z 와의 차이값이다. 번역문상의 설명글은 다음과 같다. &lt;/p&gt;
&lt;p&gt;&amp;gt; 이진 삼각형트리의 빗변의 중점의 보간된 높이와 그 지점에서의 실제 높이 필드값의 차이이다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;더 자세히 설명하자면 삼각형 노드가 20x20크기 패치를 반으로 나눈 삼각형 지역을 논리적으로 담당(덮는다)한다고 할때 20x20 에는 다양한 높이값이 있을수 있으므로, Left Z, Right Z, Center Z 의 값은 큰 차이가 나거나, 안날수가 있다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ROAM은 좁은 지역에서 심하게 울퉁불퉁 한 지형보다는.. 큰 계곡과 산이 있다고 가정하고 작성된 알고리즘이라고 생각한다. &lt;/p&gt;
&lt;p&gt;이런 큰 계곡은 특정 지역에서 점점 높아지거나, 점점 낮아질텐데, LeftZ,RightZ,CenterZ 의 크기가 크게 차이가 난다면, 중간지점에 보간할 정보가 더 있다는 뜻이 된다. &lt;/p&gt;
&lt;p&gt;큰 편차의 삼각형 분할시 편차가 더 줄어들게 되고, 편차가 적당히 줄어들때까지 삼각형 트리로 재귀 분할을 하면 세밀한 곡선 형태의 지형을 만들수 있다. (편차가 클수록 뾰족하고 삭막한 지형이 만들어 진다) &lt;/p&gt;
&lt;p&gt;번역본에서 설명하는 소스에서는 편차트리 라는것을 사용하는데, 패치(Patch/작은 사각영역) 클래스에서 하부 트리에 대한 모든 편차를 갖는다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;편차를 갖는 편차트리(자료형은 1차배열이나, 이론이 트리다)의 설명 그림 &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/376/r3.gif&quot; alt=&quot;r3.gif&quot; title=&quot;r3.gif&quot; width=&quot;400&quot; height=&quot;119&quot; style=&quot;&quot; /&gt; &amp;nbsp;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;해당 그림에서 Index 값이 CurNodeIdx 라고 생각하고, 그림 우측 아래 있는 공식이 있는데, 이것을 이해하면 소스분석할때 편하다. 잘 모르겠으면 숫자 4를 Index에 넣고 공식을 계산해 보면 될것이다. &lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;- Index로 부모 구하기 : Index &amp;gt;&amp;gt; 1 &lt;br  /&gt;- 왼쪽/오른쪽 자식 Index구하기 : Index &amp;lt;&amp;lt; 1 , Index &amp;lt;&amp;lt; + 1 &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;7. 번역문에 포함된 소스코드 가이드&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;번역문에 포함된 소스코드를 분석할때 다음을 알고 보면 편하다. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;1) 시작시에 편차트리를 만든다. (분할구조에 상관없이 특정레벨까지 만든다) &lt;br  /&gt;2) 그릴때 다음과 같은 3가지 동작을 한다. &lt;br  /&gt;&amp;nbsp;2.1) 나뉘어졌던 삼각형 이진트리를 리셋한다. (없애버린다) &lt;br  /&gt;2.2) 패치 루프를 돌며, 카메라와의 거리로 적정편차값을 만든후, 편차트리와 비교하며, 만족하는 수준의 레벨까지 분할을 한다. &lt;br  /&gt;2.3) 패치 루프를 돌며, 분할된 삼각형을 순회하며 폴리곤을 생성해 넣는다. &lt;br  /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;끝.&lt;/p&gt;&lt;/div&gt;</description>
                        <pubDate>Thu, 21 Jan 2010 22:24:48 +0900</pubDate>
                                </item>
                <item>
            <title>=강좌/디버깅= .dmp를 이용한 디버깅시 컴파일당시 소스코드 리비전을 SVN에서 받아오는 법 (MS Source Server 사용법) - ver2</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=358</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=358</guid>
                        <comments>http://magicpotato.com/?document_srl=358#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;span style=&quot;COLOR: #3a32c3&quot;&gt;﻿&lt;/span&gt; 
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;2010.01.21.&lt;span style=&quot;COLOR: #ff0000&quot;&gt;ver2&lt;/span&gt;.명국진(&lt;/span&gt;&lt;a href=&quot;http://magicpotato.com/&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;http://magicpotato.com&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;)&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;2008.03.27.ver1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;.dmp를 이용한 디버깅시 컴파일당시 소스코드 리비전을 SVN에서 받아오는 법 (MS Source Server 사용법)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;(source code revision matching from svn-server automatically when &lt;/span&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;debugging&amp;nbsp;by&lt;/span&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt;&amp;nbsp;the&lt;/span&gt;&lt;span style=&quot;FONT-SIZE: 16px&quot;&gt; dump file, using&amp;nbsp;MS source server)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;목차&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;0. 문서 개요&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;1. 소스서버 소개&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;2. 소스서버를 사용하는 전체 프로세스 요약&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;3. 소스서버 구해서 설치하고 세팅하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;4. 소스서버 실제 사용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;5. 참고자료&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;0. 문서 개요&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;이 문서는 소스코드 버전관리 시스템을 사용하는 개발팀을 위한 디버깅 관련 문서이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;개발팀이 제품을 컴파일해서 배포하더라도 소스코드는 버전업을 계속 하게 된다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;그래서 기존에 배포한 제품에서 오류가 났을 때 MiniDump()같은 기능으로 만들어낸 dmp로&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;디버깅을 하려고 하면 기존 바이너리와 현재의 소스코드 버전이 일치하지 않아서 디버깅에 어려움을 겪는다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;(예:exe는 1월1일 빌드, 현재 소스코드는 3월1일의 버전인 경우)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;MS의 소스서버는 이 문제를 해결해 주는 유틸리티인데, 펜타비전 재직 당시 아노아씨에게 소개받았다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;국내에 소스서버를 처음 접하는 사람을 위한 문서가 없어서 작성하게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;이 문서에서는 소스서버를 소개하고 설치해서 사용하는것까지를 설명한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;원서를 손쉽게 읽을 수 있는분은 MS Debugging Tools를 받아서 sdk/srccvr/srcsrv.doc 를 읽으면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #3a32c3&quot;&gt;MiniDump()&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp; 마소가 제공하는 Platform SDK: Debugging and Error Handling 의 함수로 dbghelp.dll이 제공하는 기능이다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;보통 컴파일러를 켠 상태에서 에러가 나면 콜스택과 현재 프로그램의 상태를 디버깅할 수 있는데&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp;일반 유저에게 배포한 프로그램에서 에러가 나면 어떻게 할 수 없기 때문에 개발자가 재현할 수 있도록&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp; .dmp 파일을 남겨서 http등으로 에러 업로드를 받아서 VC++에서 디버깅을 할 수 있게 해주는 함수이다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp; .dmp를 이용하기 위해서는 exe파일와 pdb파일과 추가적으로 소스파일들이 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;COLOR: #3a32c3&quot;&gt;소스코드 버전 관리 시스템&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp; 주로 팀 작업시 소스코드를 관리하는 중앙 서버를 따로 두고, 작업한 내용을 업로드 하고,&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp; 남이 작업해 올려놓은 코드를 다시 다운로드(업데이트받기)하는것을 하게 해준다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp; 소스파일이 변경될 때마다 버전이 증가되는데 이것을 리비전 이라고도 부른다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp; 관련된 툴로는 Subversion, SourceSafe, StarTeam, Perforce, Alienbrain등이 있다.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;1. 소스서버 소개&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&apos;소스서버&apos;라는 이름을 들으면 웹서버처럼 어떤 서버처럼 느껴지는데 전혀 그렇지 않다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;이것은 분명히 이름을 잘못지은것이며, 개인적으로 RevisionMatching등의 이름을 넣으면 어떻지 않았나 싶다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;소스서버는 클라이언트에서만 작동하는 단순 유틸리티이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;소스서버는 크게 2가지 유틸리티로 구성된다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;1) 빌드되어있는 pdb파일에 관련 소스코드 정보를 삽입하는 유틸리티&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp; (삽입되는 정보 : 어떤 소스파일을 버전 관리 서버로부터 어떻게 받을 수 있는지)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;2) pdb의 소스코드 버전정보를 얻어서 소스코드를 받는 기능&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p dir=&quot;ltr&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;2. 소스서버를 사용하는 전체 프로세스 요약&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;span style=&quot;COLOR: #9a9a9a&quot;&gt;&lt;strong&gt;[설치]&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;)&lt;/span&gt; 필요한 유틸리티 및 환경변수 설정 (DebuggingTools, SVN, ActivePerl) 및 (PATH)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma; COLOR: #9a9a9a&quot;&gt;&lt;strong&gt;[사용]&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;2)&lt;/span&gt; 컴파일러를 사용해서 exe와 pdb 생성&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;3)&lt;/span&gt; (매 릴리즈마다) SourceIndex 툴을 사용해서 생성되어있는 pdb에 svn의 소스파일과 버전 정보를 삽입 (SVN저장소는 건드리지 않는다)&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;4.1)&lt;/span&gt; (디버깅시)pdb에 있는 리비전 정보를 이용해 VC8+의 SourceServer통합기능을 사용해 소스를 받아 콜스택을 본다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;4.2)&lt;/span&gt; (디버깅시)pdb에 있는 리비전 정보를 이용해 srctool.exe를 사용해서 해당 버전과 일치하는 소스를 받아 수동작업을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;[주의사항]&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;ssindex.cmd를 사용해서 pdb에 소스파일/리비전 정보를 넣을 때 유틸리티는 exe와 소스파일이 일치하는지 확인하지 않는다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;따라서 ssindex(SourceIndexing)는 한번만 해야 하며, ssindex를 2번째 실행 할 때 이미 인덱싱된 pdb에 영향이 가지 않도록&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;완전 다른 폴더에 따로 보관해 둬야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;3. 소스서버 구해서 설치하고 세팅하기&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&amp;nbsp;1) 소스서버&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 소스서버는 그 자체로 제품이 아니라 Microsoft Debugging Tools에 포함되어있는 서브툴이다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href=&quot;http://www.microsoft.com/whdc/devtools/debugging/default.mspx&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;http://www.microsoft.com/whdc/devtools/debugging/default.mspx&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt; 에서 적당한것을 다운받아서 설치하면&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:\Program Files\Debugging Tools for Windows\sdk\srcsrv 같은 위치에 소스서버 유틸리티들을 찾을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&amp;nbsp;2) Perl (ActivePerl)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 소스서버는 폴더 탐색이나 소스컨트롤 사용등 기타 작업을 쉽게 하기위해 perl 스크립트를 사용한다.&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 여기서는 무난한 ActivePerl을 사용하겠다. (&lt;/span&gt;&lt;a href=&quot;http://www.activestate.com/Products/activeperl/&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;http://www.activestate.com/Products/activeperl/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&amp;nbsp;3) SVN (버전 관리 시스템)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SVN에 대해 자세히 설명하는것은 이 문서의 범위를 벗어나므로 링크만 기록한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href=&quot;http://subversion.tigris.org/project_packages.html&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;http://subversion.tigris.org/project_packages.html&lt;/span&gt;&lt;/a&gt;&lt;br  /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;4. 소스서버 실제 사용 (예제)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;1) 세팅&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;
&lt;p&gt;&lt;br  /&gt;SrcSvr과 Perl, svn을 어디에서나 실행할 수 있도록 환경변수 PATH를 수정해 줘야 한다.&lt;br  /&gt;또한 SrcSvr이 어떤 svn에 접근해야 하는지를 알려줘야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;[경로 세팅]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;PATH = C:\Perl\bin;C:\Program Files\Subversion\bin;C:\Program Files\Debugging Tools for Windows\sdk\srcsrv&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff6c00&quot;&gt;[소스서버정보 세팅]&lt;/span&gt;&lt;br  /&gt;대상파일 : C:\Program Files\Debugging Tools for Windows\sdk\srcsrv\srcsrv.ini 내의 MYSERVER 값 수정&lt;br  /&gt;수정 예&amp;nbsp; : MYSERVER=svn://MyteamSource&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;SVN을 기반으로 소스서버 유틸리티를 사용하면 C:\Program Files\Debugging Tools for Windows\sdk\srcsrv\svn.pm 을 실행하는데&lt;br  /&gt;한글과 관련된 문제를 해결하기 위해 2줄을 수정해 준다. (경로와 리비전을 추가)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #3a32c3&quot;&gt;if ( $curline =~ m/^Path:[\s\t]*(.*)$/i ) {&lt;/span&gt; 를 &lt;span style=&quot;COLOR: #3a32c3&quot;&gt;if ( $curline =~ m/^Path|경로:[\s\t]*(.*)$/i )&lt;/span&gt; { 로&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #3a32c3&quot;&gt;if ( $curline =~ m/^Revision:[\s\t]*(\d*)$/i ) {&lt;/span&gt; 를 &lt;span style=&quot;COLOR: #3a32c3&quot;&gt;if ( $curline =~ m/^Revision|리비전:[\s\t]*(\d*)$/i ) {&lt;/span&gt; 로&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;2) 샘플 프로젝트 생성후 빌드, SVN에 업로드 (2번 작업은 3번 작업과 병행하게 된다)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일부러 오류를 일으키는 간단한 프로젝트를 생성해서 SVN에 소스파일을 업로드 해 놓는다.&lt;br  /&gt;그리고 빌드를 해서 exe와 pdb를 만들어 놓는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SVN의 저장소 위치나 이름은 어떻게 지어도 상관없다.&lt;br  /&gt;이 예제에서는 서로 다른 버전의 소스파일로 컴파일된 바이너리 2 쌍을 백업해 놓는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;솔루션 및 소스파일 위치 : D:\...\SrcSvrTestByMagicPotato&lt;br  /&gt;exe 및 pdb 파일 위치 : D:\...\SrcSvrTestByMagicPotato\Debug&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/358/ss1.jpg&quot; alt=&quot;ss1.jpg&quot; title=&quot;ss1.jpg&quot; width=&quot;574&quot; height=&quot;278&quot; style=&quot;&quot; /&gt; &lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3) ssindex를 실행해서 pdb에 SVN 정보 삽입&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;테스트 프로젝트의 루트에서 ssindex를 실행하면 서브 폴더를 모두 돌면서 .pdb를 갱신시켜준다.&lt;br  /&gt;이때 SVN에 어떤 파일을 올리거나, 기존에 올라간 파일을 전혀 건드리지 않는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 예시에서는 ssindex를 한번만 사용했지만, 실제로는 2번 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3.1) 버전1에 대한 빌드를 만들고 소스를 모두 올려놓고 ssindex를 사용한 다음 exe와 pdb를 다른곳에 백업.&lt;br  /&gt;3.2) 로컬 소스에 수정을 가하고 버전2에 대한 빌드를 만들고 소스를 모두 올려놓고 ssindex를 사용한 다음 exe와 pdb를 다른곳에 백업.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q4&quot;&gt;D:\...\SrcSvrTestByMagicPotato)ssindex -system=svn&lt;br  /&gt;--------------------------------------------------------------------------------&lt;br  /&gt;ssindex.cmd [STATUS] : Server ini file: C:\Program Files\Debugging Tools for Windows\sdk\srcsrv\srcsrv.ini&lt;br  /&gt;ssindex.cmd [STATUS] : Source root&amp;nbsp;&amp;nbsp;&amp;nbsp; : D:\...\SrcSvrTestByMagicPotato&lt;br  /&gt;ssindex.cmd [STATUS] : Symbols root&amp;nbsp;&amp;nbsp; : D:\...\SrcSvrTestByMagicPotato&lt;br  /&gt;ssindex.cmd [STATUS] : Control system : SVN&lt;br  /&gt;ssindex.cmd [STATUS] : SVN Executable : svn.exe&lt;br  /&gt;ssindex.cmd [STATUS] : SVN Revision&amp;nbsp;&amp;nbsp; : N/A&lt;br  /&gt;ssindex.cmd [STATUS] : SVN Username&amp;nbsp;&amp;nbsp; : N/A&lt;br  /&gt;ssindex.cmd [STATUS] : SVN Password&amp;nbsp;&amp;nbsp; : N/A&lt;br  /&gt;--------------------------------------------------------------------------------&lt;br  /&gt;ssindex.cmd [STATUS] : Running... this will take some time...&lt;br  /&gt;ssindex.cmd [STATUS] : Processing svn.exe properties output ...&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;4) pdb에 리비전 정보가 제대로 들어갔는지 수동으로 확인&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;D:\...\SrcSvrTestBackup) &lt;span style=&quot;BACKGROUND-COLOR: #ff0000; COLOR: #ffffff&quot;&gt;&lt;strong&gt;srctool v1\srcsvrtestbymagicpotato.pdb&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[d:\...\srcsvrtestbymagicpotato\stdafx.cpp] cmd: cmd /c svn.exe cat &quot;svn://.../SrcSvrTestByMagicPotato/stdafx.cpp@7229&quot; --non-interactive&amp;nbsp; &quot;D:\...\SrcSvrTestBackup\...\SrcSvrTestByMagicPotato\stdafx.cpp\7229\stdafx.cpp&quot;&lt;br  /&gt;[d:\...\srcsvrtestbymagicpotato\stdafx.h] cmd: cmd /c svn.exe cat &quot;svn://.../SrcSvrTestByMagicPotato/stdafx.h@7229&quot; --non-interactive&amp;nbsp; &quot;D:\...\SrcSvrTestBackup\...\SrcSvrTestByMagicPotato\stdafx.h\7229\stdafx.h&quot;&lt;br  /&gt;[d:\...\srcsvrtestbymagicpotato\srcsvrtestbymagicpotato.cpp] cmd: cmd /c svn.exe cat &quot;&lt;strong&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ffa700; COLOR: #ffffff&quot;&gt;svn://.../SrcSvrTestByMagicPotato/SrcSvrTestByMagicPotato.cpp@7230&lt;/span&gt;&lt;/strong&gt;&quot; --non-interactive&amp;nbsp; &quot;D:\...\SrcSvrTestBackup\...\SrcSvrTestByMagicPotato\SrcSvrTestByMagicPotato.cpp\&lt;strong&gt;7230&lt;/strong&gt;\srcsvrtestbymagicpotato.cpp&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;v1\srcsvrtestbymagicpotato.pdb: 3 source files are indexed - 160 are not&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q1&quot;&gt;
&lt;p&gt;D:\...\SrcSvrTestBackup) &lt;strong&gt;&lt;span style=&quot;BACKGROUND-COLOR: #ff0000; COLOR: #ffffff&quot;&gt;srctool v2\srcsvrtestbymagicpotato.pdb&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[d:\...\srcsvrtestbymagicpotato\stdafx.cpp] cmd: cmd /c svn.exe cat &quot;svn://.../SrcSvrTestByMagicPotato/stdafx.cpp@7229&quot; --non-interactive&amp;nbsp; &quot;D:\...\SrcSvrTestBackup\...\SrcSvrTestByMagicPotato\stdafx.cpp\7229\stdafx.cpp&quot;&lt;br  /&gt;[d:\...\srcsvrtestbymagicpotato\stdafx.h] cmd: cmd /c svn.exe cat &quot;svn://.../SrcSvrTestByMagicPotato/stdafx.h@7229&quot; --non-interactive&amp;nbsp; &quot;D:\...\SrcSvrTestBackup\...\SrcSvrTestByMagicPotato\stdafx.h\7229\stdafx.h&quot;&lt;br  /&gt;[d:\...\srcsvrtestbymagicpotato\srcsvrtestbymagicpotato.cpp] cmd: cmd /c svn.exe cat &quot;&lt;span style=&quot;BACKGROUND-COLOR: #ffa700; COLOR: #ffffff&quot;&gt;&lt;strong&gt;svn://.../SrcSvrTestByMagicPotato/SrcSvrTestByMagicPotato.cpp@7233&lt;/strong&gt;&lt;/span&gt;&quot; --non-interactive&amp;nbsp; &quot;D:\...\SrcSvrTestBackup\...\SrcSvrTestByMagicPotato\SrcSvrTestByMagicPotato.cpp\&lt;strong&gt;7233&lt;/strong&gt;\srcsvrtestbymagicpotato.cpp&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;v2\srcsvrtestbymagicpotato.pdb: 3 source files are indexed - 160 are not&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br  /&gt;&lt;strong&gt;5) VC8+(VS2005+)에서 자동으로 소스를 받아서 보여주게 하기 위한 세팅&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;컴파일러 없이 EXE만 실행해서 오류를 낼 것인데, 오류가 나면 디버거를 띄울것이다.&lt;br  /&gt;이때 VC8+이 소스서버 유틸리티를 사용해서 소스를 자동으로 받게 하려면 세팅이 필요하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;&lt;strong&gt;[Tools] - [Options] - [Debugging] - [Enable source server support] 의 체크를 켜준다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/358/ss2.jpg&quot; alt=&quot;ss2.jpg&quot; title=&quot;ss2.jpg&quot; width=&quot;850&quot; height=&quot;375&quot; style=&quot;&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;6) 2쌍의 exe를 실행해서 오류가 나면 디버거를 실행시켜서 소스를 제대로 받는지 확인해 본다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;pdb와 연결된 소스코드는 SVN으로부터 받으며, 저장위치는 임시폴더이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;&lt;strong&gt;VC8에 소스서버 사용 옵션을 켜 놓으면 다음과 같이 소스를 받을건데 실행하냐고 물어본다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/358/ss3.jpg&quot; alt=&quot;ss3.jpg&quot; title=&quot;ss3.jpg&quot; width=&quot;887&quot; height=&quot;379&quot; style=&quot;&quot; /&gt;&amp;nbsp;&lt;br  /&gt;cmd /c svn.exe cat &quot;svn://.../SrcSvrTestByMagicPotato/&lt;span style=&quot;BACKGROUND-COLOR: #ff6600; COLOR: #ffffff&quot;&gt;SrcSvrTestByMagicPotato.cpp@7230&lt;/span&gt;&quot; --non-interactive&amp;nbsp; &quot;C:\Documents and Settings\magicpotato\Local Settings\Application Data\SourceServer\...\SrcSvrTestByMagicPotato\SrcSvrTestByMagicPotato.cpp\7230\srcsvrtestbymagicpotato.cpp&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;&lt;strong&gt;소스를 받겠다고 한 다음 첫번째 버전에 대한 디버깅 화면 (printf에 Hellp mp? 라고 적혀있다.)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/358/ss4.jpg&quot; alt=&quot;ss4.jpg&quot; title=&quot;ss4.jpg&quot; width=&quot;1041&quot; height=&quot;467&quot; style=&quot;&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;&lt;strong&gt;소스를 받겠다고 한 다음 두번째 버전에 대한 디버깅 화면 (printf에 Hello MagicPotato? 라고 적혀있다.)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src=&quot;http://magicpotato.com/files/attach/images/61/358/ss5.jpg&quot; alt=&quot;ss5.jpg&quot; title=&quot;ss5.jpg&quot; width=&quot;1050&quot; height=&quot;466&quot; style=&quot;&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 18px&quot;&gt;5. 참고자료&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;1) &lt;a href=&quot;http://msdn2.microsoft.com/ko-kr/magazine/cc163563(en-us).aspx&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;http://msdn2.microsoft.com/ko-kr/magazine/cc163563(en-us).aspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;2) C:\Program Files\Debugging Tools for Windows\sdk\srcsrv\srcsrv.doc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;3) &lt;a href=&quot;http://hyperlightz.tistory.com/entry/SourceServerSetup&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Tahoma&quot;&gt;http://hyperlightz.tistory.com/entry/SourceServerSetup&lt;/span&gt;&lt;/a&gt;&lt;br  /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p dir=&quot;ltr&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;끝.&lt;/p&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
                        <pubDate>Thu, 21 Jan 2010 21:49:30 +0900</pubDate>
                                    <slash:comments>1</slash:comments>
                    </item>
                <item>
            <title>=공지= 다용도 쓰레드 (안부인사, 방명록, 잡담등 성격의 댓글은 이 글에 부탁드립니다)</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=292</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=292</guid>
                        <comments>http://magicpotato.com/?document_srl=292#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;헤헤 0등&lt;/div&gt;</description>
                        <pubDate>Tue, 01 Dec 2009 23:48:57 +0900</pubDate>
                                    <slash:comments>14</slash:comments>
                    </item>
                <item>
            <title>=이슈= 루아 스크립트와 OS 멀티쓰레드 이슈 요약 [ver2]</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=230</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=230</guid>
                        <comments>http://magicpotato.com/?document_srl=230#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;2009.10.22.명국진(&lt;a href=&quot;http://magicpotato.com/&quot; target=&quot;_blank&quot;&gt;http://magicpotato.com/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;루아 스크립트와 OS 멀티쓰레드 이슈 요약&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;목차&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;1. 공식적인 루아의 OS멀티쓰레드 지원 내역&lt;br  /&gt;2. 루아 State 구조&lt;br  /&gt;3. 참고방안&lt;br  /&gt;4. 참고자료&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;1. 공식적인 루아의 OS멀티쓰레드 지원 내역&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&amp;nbsp;루아는 공식적으로 OS멀티쓰레드를 지원하지 않는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;개인적으로 lua 소스코드를 확인하고 테스트해본 결과&lt;br  /&gt;&amp;nbsp;OS쓰레드마다 lua_open()를 사용해서 lua_State얻고 각각 사용하는것은 문제가 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;lua_newthread() 는 루아에서 제공하는 논리적인 개념의 쓰레드(코루틴)일 뿐, OS쓰레드와 관계가 없다.&lt;br  /&gt;&amp;nbsp;lua_newthread(lua_open()) 형태로 얻은 lua_State는 OS쓰레드세이프하지 않다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;lua_newthread()를 이용해 얻은 lua_State들은 서로 다른 OS쓰레드에서 각각 이용될 수 없다.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;2. 루아 State 구조&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&amp;nbsp;멀티쓰레드 이슈와 관련된 부분만 코드로 살펴보면 lua_State는 global_State와 상호참조하고 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;lua_State *mainL = lua_open();&lt;br  /&gt;&amp;nbsp;lua_newthread(mainL)-&amp;gt;l_G-&amp;gt;mainthread == mainL 이 성립한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q3&quot;&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;struct global_State&lt;br  /&gt;&amp;nbsp;{&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct lua_State *mainthread;&lt;br  /&gt;&amp;nbsp;};&lt;/p&gt;
&lt;p&gt;&amp;nbsp;struct lua_State&lt;br  /&gt;&amp;nbsp;{&lt;br  /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; global_State *l_G;&lt;br  /&gt;&amp;nbsp;};&lt;/p&gt;
&lt;p&gt;&amp;nbsp;#define G(L)&amp;nbsp;&amp;nbsp;&amp;nbsp; (L-&amp;gt;l_G)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;위와같은 이유로 루아쓰레드들은 서로 다른 OS쓰레드에서 각각 이용될 수 없다.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&lt;strong&gt;3. 참고방안&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;루아 개발자는 공식적으로 루아의 OS멀티쓰레드 지원을 하고 있지 않지만,&lt;br  /&gt;루아 소스코드를 확인해보면 동기화 매크로를 오버라이드 할 수 있도록 마련해 놓았다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q4&quot;&gt;
&lt;p&gt;---------- llimits.h&lt;br  /&gt;&amp;nbsp;#ifndef lua_lock&lt;br  /&gt;&amp;nbsp;#define &lt;strong&gt;lua_lock&lt;/strong&gt;(L)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((void) 0) &lt;br  /&gt;&amp;nbsp;#define &lt;strong&gt;lua_unlock&lt;/strong&gt;(L)&amp;nbsp;&amp;nbsp; ((void) 0)&lt;br  /&gt;&amp;nbsp;#endif&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;q4&quot;&gt;
&lt;p&gt;---------- luaconf.h&lt;br  /&gt;&amp;nbsp;/*&lt;br  /&gt;&amp;nbsp;@@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State&lt;br  /&gt;&amp;nbsp;@* (the data goes just *before* the lua_State pointer).&lt;br  /&gt;&amp;nbsp;** CHANGE (define) this if you really need that. This value must be&lt;br  /&gt;&amp;nbsp;** a multiple of the maximum alignment required for your machine.&lt;br  /&gt;&amp;nbsp;*/&lt;br  /&gt;&amp;nbsp;#define LUAI_EXTRASPACE&amp;nbsp; 0&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;&amp;nbsp;/*&lt;br  /&gt;&amp;nbsp;@@ luai_userstate* allow user-specific actions on threads.&lt;br  /&gt;&amp;nbsp;** CHANGE them if you defined LUAI_EXTRASPACE and need to do something&lt;br  /&gt;&amp;nbsp;** extra when a thread is created/deleted/resumed/yielded.&lt;br  /&gt;&amp;nbsp;*/&lt;br  /&gt;&amp;nbsp;#define &lt;strong&gt;luai_userstateopen&lt;/strong&gt;(L)&amp;nbsp; ((void)L)&lt;br  /&gt;&amp;nbsp;#define &lt;strong&gt;luai_userstateclose&lt;/strong&gt;(L)&amp;nbsp; ((void)L)&lt;br  /&gt;&amp;nbsp;#define luai_userstatethread(L,L1) ((void)L)&lt;br  /&gt;&amp;nbsp;#define luai_userstatefree(L)&amp;nbsp; ((void)L)&lt;br  /&gt;&amp;nbsp;#define luai_userstateresume(L,n) ((void)L)&lt;br  /&gt;&amp;nbsp;#define luai_userstateyield(L,n) ((void)L)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br  /&gt;그런데 문제는 루아 소스코드에서 L-&amp;gt;l_G 로 접근할때는 global_State에 대한 락 매크로가 없다는 것이다.&lt;br  /&gt;따라서 위 기능을 모두 구현해도 OS차원의 멀티쓰레드 이슈는 해결되지 않을것 같다.&lt;/p&gt;
&lt;p&gt;가장 편한 방법은 쓰레드마다 lua_open()만 사용하는것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;4. 참고자료&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;&lt;strong&gt;참고사항 (v2)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 14px&quot;&gt;LUAI_EXTRASPACE 매크로를 재정의해서 사용할 경우, 루아 소스코드를 새로 컴파일 해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://lua-users.org/lists/lua-l/2003-04/msg00185.html&quot; target=&quot;_blank&quot;&gt;http://lua-users.org/lists/lua-l/2003-04/msg00185.html&lt;/a&gt;&amp;nbsp;: Roberto Ierusalimschy(루아 개발자)&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;Overhead. To call a funtion (or simply check its existence) in every&lt;br  /&gt;entry/exit to a Lua function is a waste for the majority of programs&lt;br  /&gt;that do not need it. (&lt;strong&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;Support for OS threads is not an &quot;official&quot;&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;COLOR: #ff0000&quot;&gt;feature of Lua; it is more like a bonus.&lt;/span&gt;&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;-- Roberto&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;br  /&gt;&lt;a href=&quot;http://www.tecgraf.puc-rio.br/~diego/professional/luathread/&quot; target=&quot;_blank&quot;&gt;http://www.tecgraf.puc-rio.br/~diego/professional/luathread/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&amp;nbsp;- The library runs both on Unix systems supporting the Pthreads standard and on Win32 systems (natively).&lt;/p&gt;
&lt;p&gt;: 루아스크립트만 사용하는 사람이 루아쓰레드를 쓸 경우 실제로 OS멀티쓰레드 형태로 작동하게 하는것이지,&lt;/p&gt;
&lt;p&gt;: 프로그래머가 바인딩을 할때 멀티쓰레드상에서 제대로 작동하게 하는지는 보장해 주는 제품이 아니다.&lt;br  /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
                        <pubDate>Thu, 22 Oct 2009 14:07:05 +0900</pubDate>
                                    <slash:comments>4</slash:comments>
                    </item>
                <item>
            <title>=도서/목차= GPU Gems 전권 목차 (1~3)</title>
            <dc:creator>마술감자</dc:creator>
            <link>http://magicpotato.com/?document_srl=209</link>
            <guid isPermaLink="true">http://magicpotato.com/?document_srl=209</guid>
                        <comments>http://magicpotato.com/?document_srl=209#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12px&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 18px&quot;&gt;1. GPU Gems1------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;NATURAL EFFECTS&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Effective Water Simulation from Physical Models&lt;/span&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mark Finch&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Cyan Worlds)&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Rendering Water Caustics&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Juan Guardado&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA) and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Daniel Sánchez-Crespo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Universitat Pompeu Fabra / Novarama Technology)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Skin in the “Dawn” Demo&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Curtis Beeson&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kevin Bjorke&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; &lt;/span&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Animation in the “Dawn” Demo&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Curtis Beeson&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Implementing Improved Perlin Noise&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Ken Perlin&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (New York University)&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; &lt;/span&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fire in the “Vulcan” Demo&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Hubert Nguyen&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; &lt;/span&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Rendering Countless Blades of Waving Grass&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kurt Pelzer&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Piranha Bytes)&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; &lt;/span&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Simulating Diffraction&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jos Stam&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Alias Systems)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/18073/Dusk1_Small.jpg&quot; alt=&quot;Dusk1_Small.jpg&quot; title=&quot;Dusk1_Small.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;LIGHTING AND SHADOWS&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Efficient Shadow Volume Rendering&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Morgan McGuire&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Brown University)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Cinematic Lighting&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fabio Pellacini&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kiril Vidimce&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Pixar Animation Studios)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Shadow Map Antialiasing&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Michael Bunnell&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA) and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fabio Pellacini &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;(Pixar Animation Studios)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Omnidirectional Shadow Mapping&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Philipp Gerasimov&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (iXBT.com)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Generating Soft Shadows Using Occlusion Interval Maps&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;William Donnelly&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Waterloo) and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Joe Demers&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Perspective Shadow Maps: Care and Feeding&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Simon Kozlov&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Softlab-NSK)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Managing Visibility for Per-Pixel Lighting&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;John O’Rorke&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Monolith Productions)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/18073/Orge1_Small.jpg&quot; alt=&quot;Orge1_Small.jpg&quot; title=&quot;Orge1_Small.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;MATERIALS&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Real-Time Approximations to Subsurface Scattering&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Simon Green&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Ambient Occlusion&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Matt Pharr&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Simon Green&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Spatial BRDFs&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;David McAllister&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Finite-Radius Sphere Environment Mapping&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kevin Bjorke&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Texture Bombing&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;R. Steven Glanville&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/18073/Dusk2_Small.jpg&quot; alt=&quot;Dusk2_Small.jpg&quot; title=&quot;Dusk2_Small.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;IMAGE PROCESSING&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Real-Time Glow&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Greg James&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA) and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;John O’Rorke&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Monolith Productions)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Color Controls&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kevin Bjorke&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Depth of Field: A Survey of Techniques&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Joe Demers&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;High-Quality Filtering&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kevin Bjorke&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fast Filter Width Estimates with Texture Maps&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Matt Pharr&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;The OpenEXR File Format&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Florian Kainz&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Rod Bogart&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;, and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Drew Hess&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Industrial Light &amp;amp; Magic)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;A Framework for Image Processing&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Frank Jargstorff&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/18073/Vulcan2_Small.jpg&quot; alt=&quot;Vulcan2_Small.jpg&quot; title=&quot;Vulcan2_Small.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;PERFORMANCE AND PRACTICALITIES&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Graphics Pipeline Performance&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Cem Cebenoyan&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Efficient Occlusion Culling&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Dean Sekulic&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Croteam)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;The Design of FX Composer&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Christopher Maughan&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Using FX Composer&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Christopher Maughan&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;An Introduction to Shader Interfaces&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Matt Pharr&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Converting Production RenderMan Shaders to Real-Time&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Steve Marshall&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Sony Pictures Imageworks)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Integrating Hardware Shading into Cinema 4D&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jörn Loviscach&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Hochschule Bremen)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Leveraging High-Quality Software Rendering Effects in Real-Time Applications&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Alexandre Jean Claude&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Marc Stevens&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Softimage)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Integrating Shaders into Applications&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;John O’Rorke&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Monolith Productions)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/18073/Orge2_Small.jpg&quot; alt=&quot;Orge2_Small.jpg&quot; title=&quot;Orge2_Small.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;BEYOND TRIANGLES&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;A Toolkit for Computation on GPUs&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Ian Buck&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Tim Purcell&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Stanford University)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fast Fluid Dynamics Simulation on the GPU&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mark Harris&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of North Carolina at Chapel Hill)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Volume Rendering Techniques&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Milan Ikits&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Utah), &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Joe Kniss&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Utah), &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Aaron Lefohn&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of California, Davis), and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Charles Hansen&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Utah)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Applying Real-Time Shading to 3D Ultrasound Visualization&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Thilaka Sumanaweera&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Siemens Medical Solutions USA, Inc.)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Real-Time Stereograms&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fabio Policarpo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Paralelo Computação Ltda.)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#a06000&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Deformers&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Eugene d’Eon&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Waterloo) &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 18px&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 18px&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 18px&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&lt;br  /&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 18px&quot;&gt;2. GPU Gems2------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;GEOMETRIC COMPLEXITY&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Towards Photorealism in Virtual Botany&lt;/span&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;David Whatley&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Simutronics Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Terrain Rendering using GPU-Based Geometry Clipmaps&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Arul Asirvatham&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Hugues Hoppe&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Microsoft Research)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Inside Geometry Instancing&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Francesco Carucci&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Lionhead Studios)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Segment Buffering&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jon Olick&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (2015)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Optimizing Resource Management with Multi-Streaming&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kurt Pelzer&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Oliver Hoeller&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Piranha Bytes)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Hardware Occlusion Queries Made Useful&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Michael Wimmer&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jiri Bittner&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Vienna University of Technology)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Adaptive Tessellation of Subdivision Surfaces with Displacement Mapping&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Michael Bunnell&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Per-Pixel Displacement Mapping with Distance Functions&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;William Donnelly&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Waterloo)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/10657/Section2_Small.jpg&quot; alt=&quot;Section2_Small.jpg&quot; title=&quot;Section2_Small.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;SHADING, LIGHTING, AND SHADOWS&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Deferred Shading in STALKER&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Oles Shishkovtsov&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (GSC Game World)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Real-Time Computation of Dynamic Irradiance Environment Maps&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Gary King&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Approximate Bidirectional Texture Functions&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jan Kautz&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Massachusetts Institute of Technology)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Tile-Based Texture Mapping&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Li-Yi Wei&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Implementing the Mental Images Phenomena Renderer on the GPU&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Martin-Karl Lefrançois&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (mental images)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Dynamic Ambient Occlusion and Indirect Lighting&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Michael Bunnell&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Blueprint Rendering and &quot;Sketchy Drawings&quot;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Marc Nienhaus&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jürgen Döllner&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Potsdam)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Accurate Atmospheric Scattering&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Sean O&apos;Neil&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Efficient Soft-Edged Shadows Using Pixel Shader Branching&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Yury Uralsky&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Using Vertex Texture Displacement for Realistic Water Rendering&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Yuri Kryachko&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (1C: Maddox Games)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Generic Refraction Simulation&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Tiago Sousa&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Crytek)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/10657/Section3_Small.jpg&quot; alt=&quot;Section3_Small.jpg&quot; title=&quot;Section3_Small.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;HIGH-QUALITY RENDERING&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fast Third-Order Texture Filtering&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Christian Sigg&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (ETH Zurich) and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Markus Hadwiger&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (VRVis Research Center)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;High Quality Antialiased Rasterization&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Dan Wexler&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Eric Enderton&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fast Prefiltered Lines&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Eric Chan&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Frédo Durand &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;(Massachusetts Institute of Technology)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Hair Animation and Rendering in the Nalu Demo&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Hubert Nguyen&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;William Donnelly&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Using Lookup Tables to Accelerate Color Transformations&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jeremy Selan&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Sony Pictures Imageworks)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;GPU Image Processing in Apple&apos;s Motion&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Pete Warden&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Apple)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Implementing Improved Perlin Noise&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Simon Green&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Advanced High-Quality Filtering&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Justin Novosad&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (discreet)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mipmap Level Measurement&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Iain Cantlay&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Climax Entertainment)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/10657/Section4_Small.jpg&quot; alt=&quot;Section4_Small.jpg&quot; title=&quot;Section4_Small.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;GENERAL PURPOSE COMPUTATION ON GPUS: A PRIMER&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Streaming Architectures and Technology Trends&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;John Owens&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of California, Davis)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;The GeForce 6 Series GPU Architecture&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Emmett Kilgariff&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Randima Fernando&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mapping Computational Concepts to GPUs&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mark Harris&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;GPU Computation Strategies and Tips&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Ian Buck&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Stanford University)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Implementing Efficient Parallel Data Structures on GPUs&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Aaron Lefohn&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of California, Davis), &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Joe Kniss&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Utah), &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;John Owens&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of California, Davis)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;GPU Flow Control Idioms&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mark Harris&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation) and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Ian Buck&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Stanford University)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;GPU Program Optimization&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Cliff Woolley&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Virginia)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Stream Reduction Operations for GPGPU Applications&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Daniel Horn&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Stanford University)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/10657/Section5_Small2.jpg&quot; alt=&quot;Section5_Small2.jpg&quot; title=&quot;Section5_Small2.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;IMAGE-ORIENTED COMPUTING &lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Octree Textures on the GPU&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Sylvain Lefebvre&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Samuel Hornus&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;, and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fabrice Neyret&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (GRAVIR/IMAG - INRIA)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;High-Quality Global Illumination Rendering Using Rasterization&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Toshiya Hachisuka&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (The University of Tokyo)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Global Illumination using Progressive Refinement Radiosity&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Greg Coombe&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of North Carolina at Chapel Hill) and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mark Harris&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Computer Vision on the GPU&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;James Fung&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Toronto)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Deferred Filtering: Rendering from Difficult Data Formats&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Joe Kniss&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of Utah), &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Aaron Lefohn&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;, and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Nathaniel Fout&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (University of California, Davis)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Conservative Rasterization&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jon Hasselgren&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Tomas Akenine-Möller&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;, and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Lennart Ohlsson&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Lund University)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr  /&gt;

&lt;p&gt;&lt;b&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;img src=&quot;http://developer.nvidia.com/docs/IO/10657/Section6_Small2.jpg&quot; alt=&quot;Section6_Small2.jpg&quot; title=&quot;Section6_Small2.jpg&quot; align=&quot;right&quot; style=&quot;&quot; /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;SIMULATION AND NUMERICAL ALGORITHMS&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;GPU Computing for Protein Structure Prediction&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Paulius Micikevicius&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Armstrong Atlantic State University)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;A GPU Framework for Solving Systems of Linear Equations&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jens Krüger&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Rüdiger Westermann&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Technische Universität München)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Options Pricing on the GPU&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Craig Kolb&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Matt Pharr&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (NVIDIA Corporation)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Improved GPU Sorting&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Peter Kipfer&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Rüdiger Westermann&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Technische Universität München)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Flow Simulation with Complex Boundaries&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Wei Li&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Siemens Corporate Research), &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Zhe Fan&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Xiaoming Wei&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;, and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Arie Kaufman&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Stony Brook University)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Medical Image Reconstruction with the FFT&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br  /&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Thilaka Sumanaweera&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; and &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Donald Liu&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt; (Siemens Medical Solutions USA, Inc.)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;/font&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;&lt;/font&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;&amp;nbsp;&lt;br  /&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size=&quot;2&quot; face=&quot;Verdana&quot;&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 18px&quot;&gt;3. GPU Gems3------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 1: Generating Complex Procedural Terrains Using the GPU&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Ryan Geiss, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 2: Animated Crowd Rendering&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Bryan Dudash, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 3: DirectX 10 Blend Shapes: Breaking the Limits&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Tristan Lorach, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 4: Next-Generation SpeedTree Rendering&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Alexander Kharlamov, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Iain Cantlay, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Yury Stepanenko, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 5: Generic Adaptive Mesh Refinement&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Tamy Boubekeur, LaBRI–INRIA, University of Bordeaux&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Christophe Schlick, LaBRI–INRIA, University of Bordeaux&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 6: GPU-Generated Procedural Wind Animations for Trees&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Renaldas Zioma, Electronic Arts/Digital Illusions CE&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 7: Point-Based Visualization of Metaballs on a GPU&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kees van Kooten, Playlogic Game Factory&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Gino van den Bergen, Playlogic Game Factory&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Alex Telea, Eindhoven University of Technology&lt;/span&gt;&lt;br  /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 8: Summed-Area Variance Shadow Maps&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Andrew Lauritzen, University of Waterloo&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 9: Interactive Cinematic Relighting with Global Illumination&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fabio Pellacini, Dartmouth College&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Miloš Hašan, Cornell University&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kavita Bala, Cornell University&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 10: Parallel-Split Shadow Maps on Programmable GPUs&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fan Zhang, The Chinese University of Hong Kong&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Hanqiu Sun, The Chinese University of Hong Kong&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Oskari Nyman, Helsinki University of Technology&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 11: Efficient and Robust Shadow Volumes Using Hierarchical&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt; Occlusion Culling and Geometry Shaders&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Martin Stich, mental images&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Carsten Wächter, Ulm University&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Alexander Keller, Ulm University&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 12: High-Quality Ambient Occlusion&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jared Hoberock, University of Illinois at Urbana-Champaign&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Yuntao Jia, University of Illinois at Urbana-Champaign&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 13: Volumetric Light Scattering as a Post-Process&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kenny Mitchell, Electronic Arts&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 14: Advanced Techniques for Realistic Real-Time Skin Rendering&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Eugene d’Eon, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;David Luebke, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 15: Playable Universal Capture&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;George Borshukov, Electronic Arts&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jefferson Montgomery, Electronic Arts&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;John Hable, Electronic Arts&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 16: Vegetation Procedural Animation and Shading in Crysis&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Tiago Sousa, Crytek&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 17: Robust Multiple Specular Reflections and Refractions&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Tamás Umenhoffer, Budapest University of Technology and Economics&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Gustavo Patow, University of Girona&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;László Szirmay-Kalos, Budapest University of Technology and Economics&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 18: Relaxed Cone Stepping for Relief Mapping&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Fabio Policarpo, Perpetual Entertainment&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Manuel M. Oliveira, Instituto de Informática—UFRGS&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 19: Deferred Shading in Tabula Rasa&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Rusty Koonce, NCsoft Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 20: GPU-Based Importance Sampling&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mark Colbert, University of Central Florida&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jaroslav Kr?ivánek, Czech Technical University in Prague&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 21: True Impostors&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Eric Risser, University of Central Florida&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 22: Baking Normal Maps on the GPU&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Diogo Teixeira, Move Interactive&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 23: High-Speed, Off-Screen Particles&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Iain Cantlay, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 24: The Importance of Being Linear&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Larry Gritz, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Eugene d’Eon, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 25: Rendering Vector Art on the GPU&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Charles Loop, Microsoft Research&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jim Blinn, Microsoft Research&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 26: Object Detection by Color: Using the GPU for Real-Time Video Image Processing&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Ralph Brunner, Apple&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Frank Doepke, Apple&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Bunny Laden, Apple&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 27: Motion Blur as a Post-Processing Effect&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Gilberto Rosado, Rainbow Studios&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 28: Practical Post-Process Depth of Field&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Earl Hammon, Jr., Infinity Ward&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 29: Real-Time Rigid Body Simulation on GPUs&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Takahiro Harada, University of Tokyo&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 30: Real-Time Simulation and Rendering of 3D Fluids&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Keenan Crane, University of Illinois at Urbana-Champaign&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Ignacio Llamas, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Sarah Tariq, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 31: Fast N-Body Simulation with CUDA&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Lars Nyland, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mark Harris, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jan Prins, University of North Carolina at Chapel Hill&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 32: Broad-Phase Collision Detection with CUDA&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Scott Le Grand, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 33: LCP Algorithms for Collision Detection Using CUDA&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Peter Kipfer, Havok&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 34: Signed Distance Fields Using Single-Pass GPU Scan Conversion of Tetrahedra&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Kenny Erleben, University of Copenhagen&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Henrik Dohlmann, 3Dfacto R&amp;amp;D&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 35: Fast Virus Signature Matching on the GPU&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Elizabeth Seamans, Juniper Networks&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Thomas Alexander, Polytime&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 36: AES Encryption and Decryption on the GPU&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Takeshi Yamanouchi, SEGA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 37: Efficient Random Number Generation and Application Using CUDA&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Lee Howes, Imperial College London&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;David Thomas, Imperial College London&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 38: Imaging Earth’s Subsurface Using CUDA&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Bernard Deschizeaux, CGGVeritas&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Jean-Yves Blanc, CGGVeritas&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 39: Parallel Prefix Sum (Scan) with CUDA&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Mark Harris, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Shubhabrata Sengupta, University of California, Davis&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;John D. Owens, University of California, Davis&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 40: Incremental Computation of the Gaussian&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Ken Turkowski, Adobe Systems&lt;/span&gt;&lt;br  /&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px; FONT-WEIGHT: bold&quot;&gt;Chapter 41: Using the Geometry Shader for Compact and Variable-Length GPU Feedback&lt;/span&gt;&lt;br  /&gt;&lt;span style=&quot;FONT-FAMILY: Palatino Linotype; FONT-SIZE: 12px&quot;&gt;Franck Diard, NVIDIA Corporation&lt;/span&gt;&lt;br  /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/font&gt;&lt;/blockquote&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;blockquote style=&quot;MARGIN-RIGHT: 0px&quot; dir=&quot;ltr&quot;&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
                        <pubDate>Mon, 12 Oct 2009 23:02:57 +0900</pubDate>
                                    <slash:comments>2</slash:comments>
                    </item>
            </channel>
</rss>
