-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2.html
More file actions
35 lines (34 loc) · 86.8 KB
/
2.html
File metadata and controls
35 lines (34 loc) · 86.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<html class="notion-html"><head lang="en"><meta charset="utf-8"/><meta content="width=device-width,height=device-height,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover" name="viewport"/><title>2 패스 셰이더 포팅</title><meta content="en_US" property="og:locale"/><link href="/images/favicon.ico" rel="shortcut icon" type="image/x-icon"/><link href="/images/logo-ios.png" rel="apple-touch-icon"/><meta content="yes" name="apple-mobile-web-app-capable"/><meta content="telephone=no" name="format-detection"/><meta content="no" name="msapplication-tap-highlight"/><link href="4c758603f1604611142662f0ddecadcb583394b5.css" media="print" rel="stylesheet"/><link href="c2966105e8aa352ed123c7fd10adfdee28a77e8d.css" rel="stylesheet"/><meta content="CodingDad 2.0; No Secret Wiki" name="title"/><meta content="남편이자 부모인 20 + N년 차 프로그래머. 유니티 렌더링 X 최적화. 아들과 게임 만들기. 요즘 머신러닝 0년차. " name="description"/><link href="https://fonts.googleapis.com/css2?family=Nunito:wght@500;600;700&display=swap" rel="stylesheet"/><link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600;700&display=swap" rel="stylesheet"/><style type="text/css">.notion-page-block > div, .notion-collection_view_page-block > div[data-root] {font-family:Montserrat !important} .notion-header-block div, notion-page-content > notion-collection_view-block > div:first-child div {font-family:Montserrat !important} .notion-sub_header-block div {font-family:Montserrat !important} .notion-sub_sub_header-block div {font-family:Montserrat !important} div:not(.notion-code-block) {font-family:Nunito} </style><link href="9199a391c630abd691c7f60ad8c6cd3e37a0c7bc.png" rel="icon" sizes="16x16" type="image/png"/><script async="async" src="dc00f9243e99763056cd06fc0e8d431de42022e7"></script><link href="5bac511d4358fedf8fc577a9af95b2d91a429351.css" rel="stylesheet"/><script> window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-128068276-5');
</script></head><body class="notion-body"><style>body{background:#fff}body.dark{background:#191919}.initial-loading-spinner{-webkit-animation:rotate 1s linear infinite;animation:rotate 1s linear infinite;-webkit-transform-origin:center center;transform-origin:center center;width:1em;height:1em;opacity:.5;display:block;pointer-events:none}@-webkit-keyframes rotate{0%{-webkit-transform:rotate(0) translateZ(0);transform:rotate(0) translateZ(0)}100%{-webkit-transform:rotate(360deg) translateZ(0);transform:rotate(360deg) translateZ(0)}}@keyframes rotate{0%{-webkit-transform:rotate(0) translateZ(0);transform:rotate(0) translateZ(0)}100%{-webkit-transform:rotate(360deg) translateZ(0);transform:rotate(360deg) translateZ(0)}}</style><style id="scroll-properties">
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar {
background: transparent;
}
::-webkit-scrollbar-track {
background: #EDECE9;
}
::-webkit-scrollbar-thumb {
background:#D3D1CB;
}
::-webkit-scrollbar-thumb:hover {
background:#AEACA6;
}
</style><div id="notion-app"><div class="notion-app-inner notion-light-theme" style='color: rgb(55, 53, 47); fill: currentcolor; line-height: 1.5; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; -webkit-font-smoothing: auto;'><div class="notion-cursor-listener" style="width: 100vw; height: 100%; position: relative; display: flex; flex: 1 1 0%; background: white; cursor: text;"><div style="display: flex; flex-direction: column; width: 100%; overflow: hidden; visibility: unset;"><div style="max-width: 100vw; z-index: 100; background: white; user-select: none;"><div class="notion-topbar" style="width: 100%; max-width: 100vw; height: 45px; opacity: 1; transition: opacity 700ms ease 0s, color 700ms ease 0s; position: relative;"><div style="display: flex; justify-content: space-between; align-items: center; overflow: hidden; height: 45px; padding-left: 12px; padding-right: 10px;"><div class="notranslate" style="display: flex; align-items: center; line-height: 1.2; font-size: 14px; height: 100%; flex-grow: 0; margin-right: 8px; min-width: 0px;"><div class="notion-selectable notion-page-block" data-block-id="efb2b939-911f-4dc2-a1a3-d8f48f5f149a" style="display: flex; align-items: center; min-width: 0px;"><a href="index.html" rel="noopener noreferrer" style="display: flex; text-decoration: none; user-select: none; cursor: pointer; color: inherit; min-width: 0px;"><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: inline-flex; align-items: center; flex-shrink: 1; white-space: nowrap; height: 24px; border-radius: 3px; font-size: inherit; line-height: 1.2; min-width: 0px; padding-left: 6px; padding-right: 6px; color: rgb(55, 53, 47);" tabindex="0"><div style="display: flex; align-items: center; min-width: 0px;"><div aria-disabled="true" class="notion-record-icon notranslate notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; display: flex; align-items: center; justify-content: center; height: 20px; width: 20px; border-radius: 3px; flex-shrink: 0; margin-right: 6px;" tabindex="-1"><div style="display: flex; align-items: center; justify-content: center; height: 20px; width: 20px;"><div style="height: 14px; width: 14px; font-size: 14px; line-height: 1.1; margin-left: 0px; color: black;"><img alt="🤫" aria-label="🤫" class="notion-emoji" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" style="width: 100%;
height: 100%;
background: url(f87457017f44d1d87f6d662556796277387c1c28.png) 67.7966% 86.4407%/6000% 6000%"/></div></div></div><div class="notranslate" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 160px;">CodingDad 2.0; No Secret Wiki</div></div></div></a></div><span style="margin-left: 2px; margin-right: 2px; color: rgba(55, 53, 47, 0.5);">/</span><div class="notion-selectable notion-collection_view_page-block" data-block-id="e3886bfe-8d1e-478c-9f28-88aae9870972" style="display: flex; align-items: center; min-width: 0px;"><a href="e3886bfe8d1e478c9f2888aae9870972.html" rel="noopener noreferrer" style="display: flex; text-decoration: none; user-select: none; cursor: pointer; color: inherit; min-width: 0px;"><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: inline-flex; align-items: center; flex-shrink: 1; white-space: nowrap; height: 24px; border-radius: 3px; font-size: inherit; line-height: 1.2; min-width: 0px; padding-left: 6px; padding-right: 6px; color: rgb(55, 53, 47);" tabindex="0"><div style="display: flex; align-items: center; min-width: 0px;"><div aria-disabled="true" class="notion-record-icon notranslate notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; display: flex; align-items: center; justify-content: center; height: 20px; width: 20px; border-radius: 3px; flex-shrink: 0; margin-right: 6px;" tabindex="-1"><div style="display: flex; align-items: center; justify-content: center; height: 20px; width: 20px;"><div style="height: 14px; width: 14px; font-size: 14px; line-height: 1.1; margin-left: 0px; color: black;"><img alt="💽" aria-label="💽" class="notion-emoji" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" style="width: 100%;
height: 100%;
background: url(f87457017f44d1d87f6d662556796277387c1c28.png) 47.4576% 81.3559%/6000% 6000%"/></div></div></div><div class="notranslate" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 160px;">전체 글</div></div></div></a></div><span style="margin-left: 2px; margin-right: 2px; color: rgba(55, 53, 47, 0.5);">/</span><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: inline-flex; align-items: center; flex-shrink: 1; white-space: nowrap; height: 24px; border-radius: 3px; font-size: 14px; line-height: 1.2; min-width: 0px; padding-left: 6px; padding-right: 6px; color: rgb(55, 53, 47);" tabindex="0"><div class="notranslate" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 240px;">2 패스 셰이더 포팅</div></div></div><div style="flex-grow: 1; flex-shrink: 1;"></div><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: inline-flex; align-items: center; flex-shrink: 0; white-space: nowrap; height: 28px; border-radius: 3px; font-size: 14px; line-height: 1.2; min-width: 0px; padding-left: 8px; padding-right: 8px; color: rgb(55, 53, 47);" tabindex="0"><svg class="searchNew" style="width: 14px; height: 14px; display: block; fill: inherit; flex-shrink: 0; backface-visibility: hidden; margin-right: 6px;" viewBox="0 0 17 17"><path d="M6.78027 13.6729C8.24805 13.6729 9.60156 13.1982 10.709 12.4072L14.875 16.5732C15.0684 16.7666 15.3232 16.8633 15.5957 16.8633C16.167 16.8633 16.5713 16.4238 16.5713 15.8613C16.5713 15.5977 16.4834 15.3516 16.29 15.1582L12.1504 11.0098C13.0205 9.86719 13.5391 8.45215 13.5391 6.91406C13.5391 3.19629 10.498 0.155273 6.78027 0.155273C3.0625 0.155273 0.0214844 3.19629 0.0214844 6.91406C0.0214844 10.6318 3.0625 13.6729 6.78027 13.6729ZM6.78027 12.2139C3.87988 12.2139 1.48047 9.81445 1.48047 6.91406C1.48047 4.01367 3.87988 1.61426 6.78027 1.61426C9.68066 1.61426 12.0801 4.01367 12.0801 6.91406C12.0801 9.81445 9.68066 12.2139 6.78027 12.2139Z"></path></svg>Search</div><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: flex; align-items: center; justify-content: center; width: 32px; height: 28px; border-radius: 3px;" tabindex="0"><svg class="dots" style="width: 18px; height: 18px; display: block; fill: inherit; flex-shrink: 0; backface-visibility: hidden;" viewBox="0 0 13 3"><g><path d="M3,1.5A1.5,1.5,0,1,1,1.5,0,1.5,1.5,0,0,1,3,1.5Z"></path><path d="M8,1.5A1.5,1.5,0,1,1,6.5,0,1.5,1.5,0,0,1,8,1.5Z"></path><path d="M13,1.5A1.5,1.5,0,1,1,11.5,0,1.5,1.5,0,0,1,13,1.5Z"></path></g></svg></div><div style="flex: 0 0 auto; width: 1px; height: 16px; margin-left: 8px; margin-right: 8px; background: rgba(55, 53, 47, 0.16);"></div><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: inline-flex; align-items: center; flex-shrink: 0; white-space: nowrap; height: 28px; border-radius: 3px; font-size: 14px; line-height: 1.2; min-width: 0px; padding-left: 8px; padding-right: 8px; color: rgb(55, 53, 47);" tabindex="0"><svg class="notionLogo" style="width: 18px; height: 18px; display: block; fill: inherit; flex-shrink: 0; backface-visibility: hidden; margin-right: 6px;" viewBox="0 0 120 126"><path d="M 20.6927 21.9315C 24.5836 25.0924 26.0432 24.8512 33.3492 24.3638L 102.228 20.2279C 103.689 20.2279 102.474 18.7705 101.987 18.5283L 90.5477 10.2586C 88.3558 8.55699 85.4356 6.60818 79.8387 7.09563L 13.1433 11.9602C 10.711 12.2014 10.2251 13.4175 11.1939 14.3924L 20.6927 21.9315ZM 24.8281 37.9835L 24.8281 110.456C 24.8281 114.351 26.7745 115.808 31.1553 115.567L 106.853 111.187C 111.236 110.946 111.724 108.267 111.724 105.103L 111.724 33.1169C 111.724 29.958 110.509 28.2544 107.826 28.4976L 28.721 33.1169C 25.8018 33.3622 24.8281 34.8225 24.8281 37.9835ZM 99.5567 41.8711C 100.042 44.0622 99.5567 46.2512 97.3618 46.4974L 93.7143 47.2241L 93.7143 100.728C 90.5477 102.43 87.6275 103.403 85.1942 103.403C 81.2983 103.403 80.3226 102.186 77.4044 98.54L 53.5471 61.087L 53.5471 97.3239L 61.0964 99.0275C 61.0964 99.0275 61.0964 103.403 55.0057 103.403L 38.2148 104.377C 37.727 103.403 38.2148 100.973 39.9179 100.486L 44.2996 99.2717L 44.2996 51.36L 38.2158 50.8725C 37.728 48.6815 38.9431 45.5225 42.3532 45.2773L 60.3661 44.0631L 85.1942 82.0036L 85.1942 48.4402L 78.864 47.7136C 78.3781 45.0351 80.3226 43.0902 82.7569 42.849L 99.5567 41.8711ZM 7.5434 5.39404L 76.9175 0.285276C 85.4366 -0.445402 87.6285 0.0440428 92.983 3.93368L 115.128 19.4982C 118.782 22.1747 120 22.9034 120 25.8211L 120 111.187C 120 116.537 118.051 119.701 111.237 120.185L 30.6734 125.05C 25.5584 125.294 23.124 124.565 20.4453 121.158L 4.13735 99.9994C 1.21516 96.1048 0 93.191 0 89.7819L 0 13.903C 0 9.5279 1.94945 5.8785 7.5434 5.39404Z"></path></svg>Try Notion</div></div></div><div style="width: calc(100% - 0px); user-select: none;"></div></div><div class="notion-frame" style="flex-grow: 0; flex-shrink: 1; display: flex; flex-direction: column; background: white; z-index: 1; height: calc(100vh - 45px); max-height: 100%; position: relative; width: 1920px;"><div class="notion-scroller vertical" style="display: flex; flex-direction: column; z-index: 1; flex-grow: 1; position: relative; align-items: center; margin-right: 0px; margin-bottom: 0px; overflow: hidden auto;"><div class="whenContentEditable" data-content-editable-root="true" style="caret-color: rgb(55, 53, 47); width: 100%; display: flex; flex-direction: column; position: relative; align-items: center; flex-grow: 1; --whenContentEditable--WebkitUserModify:read-write-plaintext-only;"><span style="height: 1px; width: 1px;"></span><div class="pseudoSelection" contenteditable="false" data-content-editable-void="true" style="user-select: none; --pseudoSelection--background:transparent; width: 100%; display: flex; flex-direction: column; align-items: center; flex-shrink: 0; flex-grow: 0; z-index: 2;"></div><div style="width: 100%; display: flex; justify-content: center; z-index: 3; flex-shrink: 0;"><div style="max-width: 100%; min-width: 0px; width: 900px;"><div style="width: 100%; display: flex; flex-direction: column; align-items: center; flex-shrink: 0; flex-grow: 0;"><div style="max-width: 100%; padding-left: calc(96px + env(safe-area-inset-left)); width: 100%;"><div class="pseudoSelection" contenteditable="false" data-content-editable-void="true" style="user-select: none; --pseudoSelection--background:transparent; pointer-events: none;"><div class="notion-page-controls" style='display: flex; justify-content: flex-start; flex-wrap: wrap; margin-top: 80px; margin-bottom: 4px; margin-left: -1px; color: rgba(55, 53, 47, 0.5); font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; height: 24px; pointer-events: auto;'></div></div><div style="padding-right: calc(96px + env(safe-area-inset-right));"><div><div class="notion-selectable notion-page-block" data-block-id="f6ea54f1-ee2f-47cc-a4d7-29d5be228102" style='color: rgb(55, 53, 47); font-weight: 700; line-height: 1.2; font-size: 40px; font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; cursor: text; display: flex; align-items: center;'><div contenteditable="false" data-content-editable-leaf="true" placeholder="Untitled" spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;"><span class="notion-enable-hover" data-token-index="0" style="text-decoration:none;color:inherit">2 패스 셰이더 포팅</span></div></div><div style="margin-left: 4px;"></div></div></div></div></div><div style="width: 100%; display: flex; flex-direction: column; align-items: center; flex-shrink: 0; flex-grow: 0;"><div contenteditable="false" data-content-editable-void="true" style="padding-left: calc(96px + env(safe-area-inset-left)); padding-right: calc(96px + env(safe-area-inset-right)); max-width: 100%; width: 100%;"><div style="width: 100%; font-size: 14px;"><div style="width: 100%; max-width: 100%; padding-top: 8px; padding-bottom: 8px; margin: 0px auto;"><div style="margin: 0px;"><div><div style="display: flex; padding-bottom: 4px; width: 100%;"><div style="display: flex; align-items: center; height: 34px; width: 160px; flex: 0 0 auto; color: rgba(55, 53, 47, 0.65);"><div aria-disabled="true" class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; display: flex; align-items: center; height: 100%; width: 100%; border-radius: 3px; padding: 0px 6px;" tabindex="-1"><div style="display: flex; align-items: center; line-height: 120%; font-size: 14px; min-width: 0px;"><div style="margin-right: 8px;"><svg class="typesDate" style="width: 16px; height: 16px; display: block; fill: rgba(55, 53, 47, 0.45); flex-shrink: 0; backface-visibility: hidden;" viewBox="0 0 14 14"><path d="M10.8889,5.5 L3.11111,5.5 L3.11111,7.05556 L10.8889,7.05556 L10.8889,5.5 Z M12.4444,1.05556 L11.6667,1.05556 L11.6667,0 L10.1111,0 L10.1111,1.05556 L3.88889,1.05556 L3.88889,0 L2.33333,0 L2.33333,1.05556 L1.55556,1.05556 C0.692222,1.05556 0.00777777,1.75556 0.00777777,2.61111 L0,12.5 C0,13.3556 0.692222,14 1.55556,14 L12.4444,14 C13.3,14 14,13.3556 14,12.5 L14,2.61111 C14,1.75556 13.3,1.05556 12.4444,1.05556 Z M12.4444,12.5 L1.55556,12.5 L1.55556,3.94444 L12.4444,3.94444 L12.4444,12.5 Z M8.55556,8.61111 L3.11111,8.61111 L3.11111,10.1667 L8.55556,10.1667 L8.55556,8.61111 Z"></path></svg></div><div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">date</div></div></div></div><div style="display: flex; align-items: center; margin-left: 4px; height: 100%; flex: 1 1 auto; min-width: 0px;"><div aria-disabled="false" class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: flex; align-items: center; border-radius: 3px; width: 100%; min-height: 34px; padding: 6px 8px 7px; font-size: 14px; overflow: hidden;" tabindex="0"><div style="line-height: 1.5; word-break: break-word; white-space: pre-wrap; pointer-events: none;">February 20, 2020</div><div style="display: flex; position: absolute; right: 6px; top: 4px;"></div></div></div></div></div><div><div style="display: flex; padding-bottom: 4px; width: 100%;"><div style="display: flex; align-items: center; height: 34px; width: 160px; flex: 0 0 auto; color: rgba(55, 53, 47, 0.65);"><div aria-disabled="true" class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; display: flex; align-items: center; height: 100%; width: 100%; border-radius: 3px; padding: 0px 6px;" tabindex="-1"><div style="display: flex; align-items: center; line-height: 120%; font-size: 14px; min-width: 0px;"><div style="margin-right: 8px;"><svg class="typesText" style="width: 16px; height: 16px; display: block; fill: rgba(55, 53, 47, 0.45); flex-shrink: 0; backface-visibility: hidden;" viewBox="0 0 14 14"><path d="M7,4.56818 C7,4.29204 6.77614,4.06818 6.5,4.06818 L0.5,4.06818 C0.223858,4.06818 0,4.29204 0,4.56818 L0,5.61364 C0,5.88978 0.223858,6.11364 0.5,6.11364 L6.5,6.11364 C6.77614,6.11364 7,5.88978 7,5.61364 L7,4.56818 Z M0.5,1 C0.223858,1 0,1.223858 0,1.5 L0,2.54545 C0,2.8216 0.223858,3.04545 0.5,3.04545 L12.5,3.04545 C12.7761,3.04545 13,2.8216 13,2.54545 L13,1.5 C13,1.223858 12.7761,1 12.5,1 L0.5,1 Z M0,8.68182 C0,8.95796 0.223858,9.18182 0.5,9.18182 L11.5,9.18182 C11.7761,9.18182 12,8.95796 12,8.68182 L12,7.63636 C12,7.36022 11.7761,7.13636 11.5,7.13636 L0.5,7.13636 C0.223858,7.13636 0,7.36022 0,7.63636 L0,8.68182 Z M0,11.75 C0,12.0261 0.223858,12.25 0.5,12.25 L9.5,12.25 C9.77614,12.25 10,12.0261 10,11.75 L10,10.70455 C10,10.4284 9.77614,10.20455 9.5,10.20455 L0.5,10.20455 C0.223858,10.20455 0,10.4284 0,10.70455 L0,11.75 Z"></path></svg></div><div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">slug</div></div></div></div><div style="display: flex; align-items: center; margin-left: 4px; height: 100%; flex: 1 1 auto; min-width: 0px;"><div aria-disabled="false" class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: flex; align-items: center; border-radius: 3px; width: 100%; min-height: 34px; padding: 6px 8px 7px; font-size: 14px; overflow: hidden;" tabindex="0"><span style="line-height: 1.5; word-break: break-word; white-space: pre-wrap; pointer-events: none;">urp-porting-4</span><div style="display: flex; position: absolute; right: 6px; top: 4px;"></div></div></div></div></div><div><div style="display: flex; padding-bottom: 4px; width: 100%;"><div style="display: flex; align-items: center; height: 34px; width: 160px; flex: 0 0 auto; color: rgba(55, 53, 47, 0.65);"><div aria-disabled="true" class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; display: flex; align-items: center; height: 100%; width: 100%; border-radius: 3px; padding: 0px 6px;" tabindex="-1"><div style="display: flex; align-items: center; line-height: 120%; font-size: 14px; min-width: 0px;"><div style="margin-right: 8px;"><svg class="typesMultipleSelect" style="width: 16px; height: 16px; display: block; fill: rgba(55, 53, 47, 0.45); flex-shrink: 0; backface-visibility: hidden;" viewBox="0 0 14 14"><path d="M4,3 C4,2.447715 4.447715,2 5,2 L12,2 C12.5523,2 13,2.447716 13,3 C13,3.55228 12.5523,4 12,4 L5,4 C4.447715,4 4,3.55228 4,3 Z M4,7 C4,6.447715 4.447715,6 5,6 L12,6 C12.5523,6 13,6.447716 13,7 C13,7.55228 12.5523,8 12,8 L5,8 C4.447715,8 4,7.55228 4,7 Z M4,11 C4,10.447715 4.447715,10 5,10 L12,10 C12.5523,10 13,10.447716 13,11 C13,11.55228 12.5523,12 12,12 L5,12 C4.447715,12 4,11.55228 4,11 Z M2,4 C1.44771525,4 1,3.55228475 1,3 C1,2.44771525 1.44771525,2 2,2 C2.55228475,2 3,2.44771525 3,3 C3,3.55228475 2.55228475,4 2,4 Z M2,8 C1.44771525,8 1,7.55228475 1,7 C1,6.44771525 1.44771525,6 2,6 C2.55228475,6 3,6.44771525 3,7 C3,7.55228475 2.55228475,8 2,8 Z M2,12 C1.44771525,12 1,11.5522847 1,11 C1,10.4477153 1.44771525,10 2,10 C2.55228475,10 3,10.4477153 3,11 C3,11.5522847 2.55228475,12 2,12 Z"></path></svg></div><div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">tags</div></div></div></div><div style="display: flex; align-items: center; margin-left: 4px; height: 100%; flex: 1 1 auto; min-width: 0px;"><div aria-disabled="false" class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: flex; align-items: center; border-radius: 3px; width: 100%; min-height: 34px; padding: 0px 8px; font-size: 14px; overflow: hidden;" tabindex="0"><div style="display: flex; flex-wrap: wrap; padding-top: 8px; padding-bottom: 2px;"><div style="display: flex; align-items: center; flex-shrink: 1; min-width: 0px; height: 18px; border-radius: 3px; padding-left: 6px; padding-right: 6px; font-size: 14px; line-height: 120%; color: rgb(50, 48, 44); background: rgba(227, 226, 224, 0.5); margin: 0px 6px 6px 0px;"><div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center;">유니티3D</div></div><div style="display: flex; align-items: center; flex-shrink: 1; min-width: 0px; height: 18px; border-radius: 3px; padding-left: 6px; padding-right: 6px; font-size: 14px; line-height: 120%; color: rgb(64, 44, 27); background: rgb(253, 236, 200); margin: 0px 6px 6px 0px;"><div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center;">URP</div></div><div style="display: flex; align-items: center; flex-shrink: 1; min-width: 0px; height: 18px; border-radius: 3px; padding-left: 6px; padding-right: 6px; font-size: 14px; line-height: 120%; color: rgb(24, 51, 71); background: rgb(211, 229, 239); margin: 0px 6px 6px 0px;"><div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center;">URP 포팅</div></div></div><div style="display: flex; position: absolute; right: 6px; top: 4px;"></div></div></div></div></div></div><div style="display: flex;"><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: flex; align-items: center; color: rgba(55, 53, 47, 0.5); border-radius: 3px; padding-left: 6px; padding-right: 6px; height: 34px; width: auto;" tabindex="0"><svg class="chevronDownThin" style="width: 16px; height: 16px; display: block; fill: rgba(55, 53, 47, 0.35); flex-shrink: 0; backface-visibility: hidden; margin-right: 9px; margin-top: 1px;" viewBox="0 0 16 16"><path d="M8.004 12a.72.72 0 00.54-.237l6.238-6.487A.735.735 0 0015 4.753c0-.426-.314-.753-.733-.753a.76.76 0 00-.524.213l-5.739 5.955-5.747-5.955A.73.73 0 001.733 4C1.314 4 1 4.327 1 4.753c0 .204.08.384.218.531l6.238 6.479a.751.751 0 00.548.237z"></path></svg><div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0px;">2 more properties</div></div></div></div></div><div style="width: 100%; height: 1px; background: rgba(55, 53, 47, 0.09); margin-bottom: 8px;"></div></div></div></div></div><div style="display: flex; width: 100%; justify-content: center; padding-top: 5px;"><div style="max-width: 100%; min-width: 0px; width: 900px;"><div class="notion-page-content" style="flex-shrink: 0; flex-grow: 1; max-width: 100%; display: flex; align-items: flex-start; flex-direction: column; font-size: 16px; line-height: 1.5; width: 100%; z-index: 4; padding-bottom: 30vh; padding-left: calc(96px + env(safe-area-inset-left)); padding-right: calc(96px + env(safe-area-inset-right));"><div class="notion-selectable notion-image-block" data-block-id="2c6ad484-362c-467c-ba6b-de39ab0e7ab5" style="width: 696px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="2dcdbe2963533c02e6e49c3e966647f2c6ae1ed0.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="79bdf8a2-8503-4cf0-863d-0bb7ad4820b8" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">URP 포팅 시리즈의 4번째 포스트 입니다. 지난 번에는 커스텀 라이팅 헤어 셰이더를 URP용 HLSL로 포팅하는 과정을 기록했습니다. 이번에는 헤어 셰이더가 2 패스로 구현된 부분을 포팅하는 기록입니다. 작업 기록을 옮긴 것이라 중간에 실수하고 착각하는 내용도 있습니다. 오해의 여지가 있는 부분은 괄호 안에 첨언했습니다.</div></div></div></div><div class="notion-selectable notion-divider-block" data-block-id="78a9c68e-671e-4cbc-9f16-960d89252d64" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div class="notion-cursor-default" style="display: flex; align-items: center; justify-content: center; pointer-events: auto; width: 100%; height: 13px; flex: 0 0 auto; color: rgba(55, 53, 47, 0.16);"><div style="width: 100%; height: 1px; visibility: visible; border-bottom: 1px solid rgba(55, 53, 47, 0.16);"></div></div></div><div class="notion-selectable notion-text-block" data-block-id="4f9b67cd-4b38-4d90-b8e4-5c6d8080433c" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">이 셰이더는 알파테스트와 알파 블렌딩 두 개의 패스로 구현된 셰이더인데, URP에서는 멀티 패스 셰이더를 지원하지 않는다. 방법 중의 하나는 Renderer Features 기능을 사용해서 URP 렌더러에 끼워 넣는 방식. RenderObjects를 사용하면 C# 코딩을 안하고도 가능한 방법이 있다.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="e45f0d10-ec80-453d-855c-c59d18c41638" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;"><a class="notion-page-mention-token notion-text-mention-token notion-enable-hover" contenteditable="false" data-token-index="0" href="universal-rp.html" style="vertical-align:top;cursor:pointer;color:inherit;text-decoration:inherit;transition:all 100ms ease-in"><span style="white-space:nowrap"></span><span style="white-space:nowrap"><span style="width:1.1em;height:1.1em;display:inline-block;vertical-align:-0.15em;position:relative;margin-right:0.2em"><svg class="page" style="width:100%;height:100%;display:block;fill:inherit;flex-shrink:0;-webkit-backface-visibility:hidden" viewBox="0 0 30 30"><g> <path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path> </g></svg><svg class="pageLinkIndicator" style="width:0.7em;height:0.7em;display:block;fill:rgba(55, 53, 47, 1);flex-shrink:0;-webkit-backface-visibility:hidden;position:absolute;right:-0.2em;bottom:0;stroke:white;stroke-width:1.5" viewBox="0 0 13 13"><path d="M6.30826 4.43292L1.76184 8.98454C1.76176 8.98462 1.76169 8.9847 1.76161 8.98477C1.76158 8.9848 1.76156 8.98482 1.76154 8.98484C1.46068 9.28584 1.25 9.6914 1.25 10.1565C1.25 10.6117 1.45865 11.0119 1.73417 11.2886C2.01014 11.5658 2.41107 11.7773 2.87078 11.7773C3.34169 11.7773 3.73758 11.5617 4.03477 11.2733L4.03482 11.2734L4.04244 11.2657L8.58864 6.72474V8.667C8.58864 9.51956 9.22729 10.2935 10.1521 10.2935C11.0528 10.2935 11.75 9.54534 11.75 8.66127V2.92671C11.75 2.48722 11.5981 2.06381 11.2838 1.74808C10.9689 1.43182 10.5446 1.27728 10.1006 1.27728H4.36028C3.46161 1.27728 2.72804 1.97749 2.72804 2.86942C2.72804 3.79734 3.51104 4.43292 4.35455 4.43292H6.30826Z" fill="#3E3C38" stroke="white" stroke-width="1.5"></path></svg></span></span><span class="notion-page-mention-token__title" style="border-bottom:0.05em solid rgba(55,53,47,0.25);font-weight:500">Universal RP로 구현한 툰 셰이딩</span><span style="white-space:nowrap"></span></a> </div></div></div></div><div class="notion-selectable notion-callout-block" data-block-id="7389f037-e23b-4f10-af75-fd748364152a" style="width: 100%; max-width: 1718px; margin-top: 4px; margin-bottom: 4px;"><div style="display: flex;"><div style="display: flex; width: 100%; border-radius: 3px; background: rgb(241, 241, 239); padding: 16px 16px 16px 12px;"><div><div aria-disabled="true" class="notion-record-icon notranslate notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; display: flex; align-items: center; justify-content: center; height: 24px; width: 24px; border-radius: 3px; flex-shrink: 0;" tabindex="-1"><div style="display: flex; align-items: center; justify-content: center; height: 24px; width: 24px;"><div style="height: 16.8px; width: 16.8px; font-size: 16.8px; line-height: 1.1; margin-left: 0px; color: black;"><img alt="💡" aria-label="💡" class="notion-emoji" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" style="width: 100%;
height: 100%;
background: url(f87457017f44d1d87f6d662556796277387c1c28.png) 47.4576% 25.4237%/6000% 6000%"/></div></div></div></div><div style="display: flex; flex-direction: column; min-width: 0px; margin-left: 8px; width: 100%;"><div contenteditable="false" data-content-editable-leaf="true" placeholder="Type something…" spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding-left: 2px; padding-right: 2px;"><span class="notion-enable-hover" data-token-index="0" style="font-weight:600">Renderer Features와 RenderObjects란?
</span>Renderer Features란 URP 렌더러를 확장할 수 있는 기능입니다. ScriptableRendererFeature 클래스를 상속받아서 나만의 Renderer Feature를 만들어 렌더링 패스를 끼워 넣을 수 있습니다. RenderObjects란 URP에서 미리 만들어 놓은 Renderer Feature 중에 하나로 원하는 오브젝트를 다른 재질을 사용해서 다시 그릴 수 있는 기능입니다.</div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="bb99ad05-d87f-41a7-8aa3-77d35423f9da" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">RendererObjects를 사용하면 추가 패스를 어느 시점에 끼워 넣을지 고를 수 있다.</div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="a5717302-ed88-45ee-b719-67fe6ba3a652" style="width: 265px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="789faf5354d20310c6ec5baeff55660da8d6bc65.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="5155f80e-4e70-41a5-9ed3-2a4345dbfa29" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">어떤 오브젝트를 다시 그릴지는 렌더 큐, 레이어, 셰이더 패스 이름으로 필터링 할 수 있다. 예를 들어, 모든 몹에 대해서 아웃라인을 그린다든지 할 때는 몹 레이어로 필터링을 하면 되는 식. 근데, 내 경우에는 멀티 패스 렌더링을 위해서 레이어를 하나 소비하고 싶지는 않다. 그렇다면, 큐와 패스 필터만으로 어떻게 할 수 있을까? 자세한 문서를 못 찾겠다. 코드를 뒤져보자.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="d4a2e889-144d-463c-9743-d56ecf58f057" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">RenderObject.cs 안에 ScriptableRendererFeature를 상속받은 RenderObject 클래스가 있다. 모든 필터링 설정은 ScriptableRenderPass를 상속받은 RenderObjectsPass 클래스로 넘어간다. 그 안에서 렌더 큐와 레이어 마스크는 UnityEngine.Rendering.FilteringSettings에 보관되고, 패스는 UnityEngine.Rendering.DrawingSettings로 넘어간다. 그 두 가지 모두 ScriptableRenderContext.DrawRenderers() 로 넘겨진다. 소스 코드가 공개 안된 부분이라서 더 이상 추적 불가. 매뉴얼을 보자.</div></div></div></div><div class="notion-selectable notion-bookmark-block" data-block-id="e1519d43-e4f0-415f-9d57-b9f6a6753795" style="width: 100%; max-width: 1718px; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><a href="https://docs.unity3d.com/ScriptReference/Rendering.DrawingSettings.SetShaderPassName.html" rel="noopener noreferrer" style="display: block; color: inherit; text-decoration: none; flex-grow: 1; min-width: 0px;"><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; width: 100%; display: flex; flex-wrap: wrap-reverse; align-items: stretch; text-align: left; overflow: hidden; border: 1px solid rgba(55, 53, 47, 0.16); border-radius: 3px; position: relative; color: inherit; fill: inherit;" tabindex="0"><div style="flex: 4 1 180px; padding: 12px 14px 14px; overflow: hidden; text-align: left;"><div style="font-size: 14px; line-height: 20px; color: rgb(55, 53, 47); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-height: 24px; margin-bottom: 2px;">Unity - Scripting API: Rendering.DrawingSettings.</div><div style="font-size: 12px; line-height: 16px; color: rgba(55, 53, 47, 0.65); height: 32px; overflow: hidden;">Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. For some reason your suggested change could not be submitted. Please try again in a few minutes.</div><div style="display: flex; margin-top: 6px;"><img src="3ceaaa1e4b11b056e8bac62cedc00cba704c5fe6.ico" style="width: 16px; height: 16px; min-width: 16px; margin-right: 6px;"/><div style="font-size: 12px; line-height: 16px; color: rgb(55, 53, 47); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">https://docs.unity3d.com/ScriptReference/Rendering.DrawingSettings.SetShaderPassName.html</div></div></div><div style="flex: 1 1 180px; display: block; position: relative;"><div style="position: absolute; inset: 0px;"><div style="width: 100%; height: 100%;"><img src="66d64bf95cb2e9a47f7e2136dc084c94eb72cb9f.jpg" style="display: block; object-fit: cover; border-radius: 1px; width: 100%; height: 100%;"/></div></div></div></div></a></div></div></div><div class="notion-selectable notion-text-block" data-block-id="05418421-658c-4fb1-8bdd-d08cc3e5af7d" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">지정한 패스만 그리게 되니 필터의 역할이 맞다. 해당 패스만 그리되 설정해둔 Override Material을 사용해서 그리는 것 같다. ForwardLit 이라고 되어 있던 Pass 이름을 ForwardLitHair로 바꿔보자. 렌더링은 잘된다. (잘 되는 것처럼 보이지만 사실은 아니었습니다. 이유는 뒤에서…)</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="8113bd5f-abfd-4a0d-8afa-48d5bd3a4b1f" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">Render Objects를 끼워 넣어보자. 아래처럼 URP 렌더러에 추가.</div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="1236db2e-39df-4daf-bdac-883e1df13e89" style="width: 696px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="f3656b3d9df8c20b4ebf1a6d5e80f0770aa62a1b.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="eca60caf-d451-4953-8ed3-86440d6e55aa" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">오버라이드용 재질을 하나 만들고 Pass Index는 1로 지정. 원래 셰이더의 두 번째 패스로 알파 블렌딩 패스를 끼워 넣을 예정.</div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="10c14261-6af1-4edd-b17d-a24033f91d58" style="width: 696px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="da3554c548121329d2c1b92013c20f077f7b0b12.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="d4b1c4f4-8d00-4dc3-b7e3-6ace8368a67b" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">이렇게 재질을 오버라이드하는 방식은 셰이더 프로퍼티도 모두 덮어 써야 하기 때문에, 프로퍼티는 그대로 쓰면서 패스만 더해주고 싶을 때는 불편하다. 헤어 재질도 여러 개가 될 수 있으므로 그때마다 렌더러 설정을 바꿔주는 코딩도 해야 하고. 우선 돌아가는지만 보고 다른 해결책을 찾아야겠다.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="2e557149-4719-4d37-87cd-d0701581ce51" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">오.. 예상대로는 잘 돌아간다. 근데 알파 블렌딩되는 부분이 이상하다. 분명히 불투명 오브젝트를 다 그리고 난 후에 그리라고 설정했는데(After Rendering Opaques) 터레인이 그려지기 전에 알파 블렌딩 패스가 그려진다. RenderObjects 사용법 중에 모르는 것이 있나 보다.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="d3b1edc4-5300-4d19-a58d-629613b8e549" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">RenderObjects의 Event를 이리저리 바꿔줘도 효과가 없다. 잘못 이해한 건가. 소스 체크 고고.</div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="f6446597-e6f3-42ed-9593-3e604fa61f87" style="width: 481px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="0dfb9aa23cd53c9e2d69926adf51d459eac31bb7.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="28e7e2ef-4521-4c71-8e25-992758fda445" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">RenderObjects 클래스에서 RenderObjectsPass 클래스로 넘겨진다. 이 패스는 ScriptableRenderer.EnqueuePass()에 전달되고 실행될 때 SortStable() 함수 안에서 정렬이 된다. ScriptableRenderPass 클래스에는 <, > 오퍼레이터가 오버로딩되어있고, renderPassEvent 기준으로 반환한다. 그렇다면, 위에 넣어준 Event에 맞게 정렬이 되야할 것 같은데 이상하다.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="a7fda30c-a166-4ec2-b6fd-a9bc044b43fc" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">SortStable()에 브레이크포인트를 걸어보니 잘 걸린다. 정렬이 잘 되나 보자.</div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="afac5f90-641a-4ffc-895e-3f6213b6f15f" style="width: 474px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="0db03ca639ea57f1b1b4175ff891b284cfacb872.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="323851dc-c8fb-4451-ac1f-e3b1f4e3eb57" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">정렬은 잘되어 있고, 그 순서대로 RenderObjectsPass.Execute() 는 호출된다. 그 안에서 ScriptableRenderContext에 DrawRenderers()나 ExecuteCommandbuffer()를 호출한다. 근데, 왜 순서가 안맞을까?</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="0bdd6cf7-cc43-4199-8151-e917a6f5274c" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">컥, RenderObjects 설정을 없애도 알파 블렌딩 패스가 그려진다.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="f8e682c2-7e46-4957-ad4f-f2a4d0a9567a" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">그렇다. RenderObjects는 동작하고 있지 않았고, 그냥 셰이더의 2패스가 연속으로 그려졌던 것. 알파블렌딩 패스에는 Tag도 없는데 왜 그려졌을까?</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="f410d815-c59c-41ed-ac61-ee49bc540bb1" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">스펙인지 버그인지 모르겠지만 셰이더에서 첫 번째 패스에 Tags {“LightMode” = “UniversalForward”}로 하고 두 번째 패스에 Tags를 지우니 두 개의 연속된 드로우콜로 그려진다. 두 번째 패스에 Tags를 다시 넣으면 첫 번째 패스만 그려진다. 혹시나 하고 두 패스 모두 Tags를 지우니 마찬가지로 첫 번째 패스만 그려진다.프레임 디버거에 이렇게 멀티 패스 셰이더라고 언급하는 걸 보면 단순한 버그는 아닌 것 같다.</div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="3142825e-0ca7-4664-aae2-6035d888f415" style="width: 409px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="42fff4794322752fa3fa9f4a8d8ee24d1aae3681.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="2ab55dcc-26bf-433a-825c-3587a2803deb" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">불투명한 오브젝트를 그리는 ScriptableRenderPass를 디버깅해보자. ShaderTagIdList에는 예상대로만 들어 있다. (ShaderTagIdList에 포함되는 태그와 일치하는 셰이더 패스를 가진 셰이더를 가진 재질을 가진 렌더러를 가진 오브젝트들만 그려지는 것이 원래 스펙입니다. )</div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="67d67f03-5fff-4e98-bc22-3b4e90094a0b" style="width: 381px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="43fb3f15b9b9f98f4d18efd325ca7f1fbcbba97e.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="7fd4850a-857b-4e3d-a0e5-93e65037e880" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">공개된 소스코드 안에서는 왜 태그가 없는 패스도 같이 그려지는지는 알 수가 없다. 증상만 정리하면 이렇다.</div></div></div></div><div class="notion-selectable notion-bulleted_list-block" data-block-id="19c7d3d5-73c6-4fdc-905e-6e0967a87b1b" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="display: flex; align-items: flex-start; width: 100%; padding-left: 2px; color: inherit; fill: inherit;"><div class="pseudoSelection" contenteditable="false" data-content-editable-void="true" data-text-edit-side="start" style="user-select: none; --pseudoSelection--background:transparent; margin-right: 2px; width: 24px; display: flex; align-items: center; justify-content: center; flex-grow: 0; flex-shrink: 0; min-height: calc(1.5em + 3px + 3px);"><div class="pseudoBefore" style='font-size: 1.5em; line-height: 1; margin-bottom: 0px; --pseudoBefore--fontFamily:Arial; --pseudoBefore--content:"•";'></div></div><div style="flex: 1 1 0px; min-width: 1px; display: flex; flex-direction: column;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder="List" spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px; text-align: left;">두 패스 모두 UniversalForward 태그가 있으면 첫 번째 패스만 그려진다</div></div></div></div></div><div class="notion-selectable notion-bulleted_list-block" data-block-id="e102b834-659b-41b5-9980-f5527297c119" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="display: flex; align-items: flex-start; width: 100%; padding-left: 2px; color: inherit; fill: inherit;"><div class="pseudoSelection" contenteditable="false" data-content-editable-void="true" data-text-edit-side="start" style="user-select: none; --pseudoSelection--background:transparent; margin-right: 2px; width: 24px; display: flex; align-items: center; justify-content: center; flex-grow: 0; flex-shrink: 0; min-height: calc(1.5em + 3px + 3px);"><div class="pseudoBefore" style='font-size: 1.5em; line-height: 1; margin-bottom: 0px; --pseudoBefore--fontFamily:Arial; --pseudoBefore--content:"•";'></div></div><div style="flex: 1 1 0px; min-width: 1px; display: flex; flex-direction: column;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder="List" spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px; text-align: left;">두 패스 모두 태그가 없으면 첫번째 패스만 그려진다</div></div></div></div></div><div class="notion-selectable notion-bulleted_list-block" data-block-id="329f7fe3-e75d-4329-a9ee-b5a276f10154" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="display: flex; align-items: flex-start; width: 100%; padding-left: 2px; color: inherit; fill: inherit;"><div class="pseudoSelection" contenteditable="false" data-content-editable-void="true" data-text-edit-side="start" style="user-select: none; --pseudoSelection--background:transparent; margin-right: 2px; width: 24px; display: flex; align-items: center; justify-content: center; flex-grow: 0; flex-shrink: 0; min-height: calc(1.5em + 3px + 3px);"><div class="pseudoBefore" style='font-size: 1.5em; line-height: 1; margin-bottom: 0px; --pseudoBefore--fontFamily:Arial; --pseudoBefore--content:"•";'></div></div><div style="flex: 1 1 0px; min-width: 1px; display: flex; flex-direction: column;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder="List" spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px; text-align: left;">두 패스 모두 UniversalForward가 아닌 이상한 이름의 태그를 지정하면 아무것도 안 그려진다</div></div></div></div></div><div class="notion-selectable notion-bulleted_list-block" data-block-id="a2af5742-a18a-404b-8cfe-d5f9ae8758b1" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="display: flex; align-items: flex-start; width: 100%; padding-left: 2px; color: inherit; fill: inherit;"><div class="pseudoSelection" contenteditable="false" data-content-editable-void="true" data-text-edit-side="start" style="user-select: none; --pseudoSelection--background:transparent; margin-right: 2px; width: 24px; display: flex; align-items: center; justify-content: center; flex-grow: 0; flex-shrink: 0; min-height: calc(1.5em + 3px + 3px);"><div class="pseudoBefore" style='font-size: 1.5em; line-height: 1; margin-bottom: 0px; --pseudoBefore--fontFamily:Arial; --pseudoBefore--content:"•";'></div></div><div style="flex: 1 1 0px; min-width: 1px; display: flex; flex-direction: column;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder="List" spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px; text-align: left;">한 패스가 UniversalForward 태그를 가지고 다른 패스가 태그가 없으면 둘 다 그려진다. 패스 순서에 상관없이 태그가 붙은 패스 먼저 그려짐.</div></div><div class="notion-selectable notion-bulleted_list-block" data-block-id="7c79560e-d3d7-4a65-9be3-f1dffa3d38fb" style="width: 100%; max-width: 100%; margin-top: 2px; margin-bottom: 0px;"><div style="display: flex; align-items: flex-start; width: 100%; padding-left: 2px; color: inherit; fill: inherit;"><div class="pseudoSelection" contenteditable="false" data-content-editable-void="true" data-text-edit-side="start" style="user-select: none; --pseudoSelection--background:transparent; margin-right: 2px; width: 24px; display: flex; align-items: center; justify-content: center; flex-grow: 0; flex-shrink: 0; min-height: calc(1.5em + 3px + 3px);"><div class="pseudoBefore" style='font-size: 1.5em; line-height: 1; margin-bottom: 0px; --pseudoBefore--fontFamily:Arial; --pseudoBefore--content:"◦";'></div></div><div style="flex: 1 1 0px; min-width: 1px; display: flex; flex-direction: column;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder="List" spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px; text-align: left;">이 때 태그 없는 패스가 하나 더 있어도 그려지지는 않는다</div></div></div></div></div></div></div></div><div class="notion-selectable notion-bulleted_list-block" data-block-id="c4d3ae9e-6246-40b0-a30e-6b50791df4e6" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="display: flex; align-items: flex-start; width: 100%; padding-left: 2px; color: inherit; fill: inherit;"><div class="pseudoSelection" contenteditable="false" data-content-editable-void="true" data-text-edit-side="start" style="user-select: none; --pseudoSelection--background:transparent; margin-right: 2px; width: 24px; display: flex; align-items: center; justify-content: center; flex-grow: 0; flex-shrink: 0; min-height: calc(1.5em + 3px + 3px);"><div class="pseudoBefore" style='font-size: 1.5em; line-height: 1; margin-bottom: 0px; --pseudoBefore--fontFamily:Arial; --pseudoBefore--content:"•";'></div></div><div style="flex: 1 1 0px; min-width: 1px; display: flex; flex-direction: column;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder="List" spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px; text-align: left;">두 패스 모두 UniversalForward 태그가 있으면 첫 번째 패스만 그려진다</div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="bf933b3b-e769-4c22-a6c7-4386fdbe37cc" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">어쨌든 우리 셰이더는 불투명에서 한 번, 투명에서 한 번 그려줘야 하므로 이 기능(혹은 버그)를 사용할 수 없다.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="d77e60fe-9e0a-4af7-b542-5433a96ce681" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">그러니, Render Objects 기능이 왜 동작을 안 하는지 파악해서 돌아가게 하자. 확인해 보니 문제의 원인은 Filters에 잘못된 값을 넣었기 때문. 일단 Queue는 Opaque를 넣어야 한다. 기본적으로 URP에 의해서 렌더링되는 첫번째 패스에 대한 정보를 넣어줘야 된다. 그러면 URP가 다시 해당 오브젝트를 렌더링하면서 이번에는 오버라이드된 재질로 그리는 방식이니까.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="c82d26b4-fa7c-4818-ae7d-afefa500a69e" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">또 한 가지 잘못한 것은 Shader Passes에 패스의 Name을 넣었는데, Tags의 LightMode 값을 넣어야 한다. 아래의 코드를 예를 들면 “StandardLit”이 아니라 “UniversalForward”를 넣어야 한다.</div></div></div></div><div class="notion-selectable notion-code-block" data-block-id="b854eea2-03c0-4b36-aea2-7ee111ac2149" style="width: 100%; max-width: 1718px; margin-top: 4px; margin-bottom: 4px;"><div style="display: flex;"><div contenteditable="false" data-content-editable-void="true" style="flex-grow: 1; border-radius: 3px; text-align: left; position: relative; background: rgb(247, 246, 243); min-width: 0px; width: 100%;"><div><div class="line-numbers notion-code-block" style="display: flex;"><div autocapitalize="off" autocorrect="off" contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="false" style='flex-grow: 1; flex-shrink: 1; text-align: left; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 85%; tab-size: 2; padding: 34px 16px 32px 32px; min-height: 1em; color: rgb(55, 53, 47); white-space: pre-wrap; word-break: break-all; min-width: 0px;'><span class="" data-token-index="0"> Pass
</span><span class="token punctuation" data-token-index="0">{</span><span class="" data-token-index="0">
Name </span><span class="token string" data-token-index="0">"StandardLit"</span><span class="" data-token-index="0">
Tags</span><span class="token punctuation" data-token-index="0">{</span><span class="token string" data-token-index="0">"LightMode"</span><span class="" data-token-index="0"> </span><span class="token operator" data-token-index="0">=</span><span class="" data-token-index="0"> </span><span class="token string" data-token-index="0">"UniversalForward"</span><span class="token punctuation" data-token-index="0">}</span><span>
</span></div></div></div><div style="position: absolute; top: 3px; right: 1px; color: rgba(55, 53, 47, 0.65); display: flex; align-items: center; justify-content: flex-end; height: 25px; font-size: 11.5px; opacity: 0; transition: opacity 300ms ease-in 0s;"><div style="color: rgba(55, 53, 47, 0.65); display: flex; align-items: center; justify-content: center; font-size: 12px; margin-top: 4px; margin-right: 4px;"><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: inline-flex; align-items: center; white-space: nowrap; height: 25px; border-radius: 3px 0px 0px 3px; font-size: 11.5px; line-height: 1.2; padding: 4px 6px; color: rgb(55, 53, 47); background: rgb(234, 233, 229); font-weight: 400;" tabindex="0"><svg class="copy" style="width: 16px; height: 16px; display: block; fill: inherit; flex-shrink: 0; backface-visibility: hidden; padding-right: 4px;" viewBox="0 0 14 16"><path d="M2.404 15.322h5.701c1.26 0 1.887-.662 1.887-1.927V12.38h1.154c1.254 0 1.91-.662 1.91-1.928V5.555c0-.774-.158-1.266-.626-1.74L9.512.837C9.066.387 8.545.21 7.865.21H5.463c-1.254 0-1.91.662-1.91 1.928v1.084H2.404c-1.254 0-1.91.668-1.91 1.933v8.239c0 1.265.656 1.927 1.91 1.927zm7.588-6.62c0-.792-.1-1.161-.592-1.665L6.225 3.814c-.452-.462-.844-.58-1.5-.591V2.215c0-.533.28-.832.843-.832h2.38v2.883c0 .726.386 1.113 1.107 1.113h2.83v4.998c0 .539-.276.832-.844.832H9.992V8.701zm-.79-4.29c-.206 0-.288-.088-.288-.287V1.594l2.771 2.818H9.201zM2.503 14.15c-.563 0-.844-.293-.844-.832V5.232c0-.539.281-.837.85-.837h1.91v3.187c0 .85.416 1.26 1.26 1.26h3.14v4.476c0 .54-.28.832-.843.832H2.504zM5.79 7.816c-.24 0-.346-.105-.346-.345V4.547l3.223 3.27H5.791z"></path></svg>Copy</div></div></div><div style="position: absolute; top: 8px; left: 8px; color: rgba(55, 53, 47, 0.65); display: flex; align-items: center; justify-content: flex-end; opacity: 0; transition: opacity 300ms ease-in 0s;"><div aria-disabled="true" class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; display: inline-flex; align-items: center; white-space: nowrap; height: 20px; border-radius: 3px; font-size: 12px; line-height: 1.2; padding-left: 5px; padding-right: 5px; color: rgba(55, 53, 47, 0.65); margin-right: 5px;" tabindex="-1">C<svg class="chevronDown" style="width: 10px; height: 100%; display: block; fill: rgba(55, 53, 47, 0.35); flex-shrink: 0; backface-visibility: hidden; margin-left: 4px;" viewBox="0 0 30 30"><polygon points="15,17.4 4.8,7 2,9.8 15,23 28,9.8 25.2,7 "></polygon></svg></div></div><div style="background: white; padding-right: 105px;"></div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="6bc59552-a41e-45c7-bba7-6c8187072c4c" style="width: 439px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="25c5a968bfb30ec6bb25f3220e327f4bd4028067.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="6ce4d003-ab7d-4d31-ba89-43f655752bcd" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">결론적으로 Render Features는 내 용도에 맞는 물건이 아니다. (용도에 맞는 물건이 맞아요. 제정신이 아니었나 봐요. 설명은 뒤에..) 우선 패스의 Name으로 필터가 안되기 때문에 헤어 게임오브젝트만 덧그릴 방법이 없다. 그리고 재질 애셋을 넣어주는 방식이라서 재질이 런타임에 변경되어서 Instanced로 되어 버리면 첫 번째 패스는 Instanced 된 재질을 쓰고, 두 번째 패스는 재질 애셋을 쓰게 되어서 셰이더 파라메터들이 달라지는 문제가 있다.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="77a28d30-93e8-4a8f-b313-2062a1fda49b" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">코딩을 좀 하더라도 가능한 방법을 찾아보자. 결국에는 FilteringSettings에 의해서 무엇을 그릴지 결정되는데 이 안에는 RenderingLayerMask가 있다.</div></div></div></div><div class="notion-selectable notion-bookmark-block" data-block-id="f9576bed-85cd-4f3e-8d3e-3932f9a38f1e" style="width: 100%; max-width: 1718px; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><a href="https://docs.unity3d.com/ScriptReference/Rendering.FilteringSettings-renderingLayerMask.html" rel="noopener noreferrer" style="display: block; color: inherit; text-decoration: none; flex-grow: 1; min-width: 0px;"><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; width: 100%; display: flex; flex-wrap: wrap-reverse; align-items: stretch; text-align: left; overflow: hidden; border: 1px solid rgba(55, 53, 47, 0.16); border-radius: 3px; position: relative; color: inherit; fill: inherit;" tabindex="0"><div style="flex: 4 1 180px; padding: 12px 14px 14px; overflow: hidden; text-align: left;"><div style="font-size: 14px; line-height: 20px; color: rgb(55, 53, 47); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-height: 24px; margin-bottom: 2px;">Unity - Scripting API: Rendering.FilteringSettings.renderingLayerMask</div><div style="font-size: 12px; line-height: 16px; color: rgba(55, 53, 47, 0.65); height: 32px; overflow: hidden;">Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. For some reason your suggested change could not be submitted. Please try again in a few minutes.</div><div style="display: flex; margin-top: 6px;"><img src="3ceaaa1e4b11b056e8bac62cedc00cba704c5fe6.ico" style="width: 16px; height: 16px; min-width: 16px; margin-right: 6px;"/><div style="font-size: 12px; line-height: 16px; color: rgb(55, 53, 47); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">https://docs.unity3d.com/ScriptReference/Rendering.FilteringSettings-renderingLayerMask.html</div></div></div><div style="flex: 1 1 180px; display: block; position: relative;"><div style="position: absolute; inset: 0px;"><div style="width: 100%; height: 100%;"><img src="66d64bf95cb2e9a47f7e2136dc084c94eb72cb9f.jpg" style="display: block; object-fit: cover; border-radius: 1px; width: 100%; height: 100%;"/></div></div></div></div></a></div></div></div><div class="notion-selectable notion-text-block" data-block-id="80c68740-81de-43a3-9826-e14c94fade04" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">이는 그냥 Layer와 다른 것으로 MeshRenderer에 보면 지정할 수 있게 되어 있다.</div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="8a45469d-29e1-4460-b673-a7ab8a7e8c5b" style="width: 435px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="74c96ed95f09cc37ad35718b3d09574e65c85460.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="f08184b4-b985-41c1-8eec-ac4af085f90d" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">우선 필터링은 해결. RenderingLayerMask를 써서 헤어용 레이어를 하나 할당하면 될 것 같다. (결국에는 다른 방법을 씁니다. 설명은 뒤에..)</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="630c0a20-2afa-44f2-ae2e-9ba23b036221" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">재질이 분리되는 이슈는 재질은 오버라이드 하지 않고 패스만 오버라이드 할 수 있으면 해결된다. DrawSettings에 재질 오버라이드 프로퍼티와 패스 오버라이드 프로퍼티가 분리되어 있기는 한데 재질을 오버라이드 하지 않아도 작동할지는 해봐야 안다.</div></div></div></div><div class="notion-selectable notion-bookmark-block" data-block-id="8fe940df-65e4-4468-96aa-78c08015e5b8" style="width: 100%; max-width: 1718px; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><a href="https://docs.unity3d.com/ScriptReference/Rendering.DrawingSettings-overrideMaterialPassIndex.html" rel="noopener noreferrer" style="display: block; color: inherit; text-decoration: none; flex-grow: 1; min-width: 0px;"><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; width: 100%; display: flex; flex-wrap: wrap-reverse; align-items: stretch; text-align: left; overflow: hidden; border: 1px solid rgba(55, 53, 47, 0.16); border-radius: 3px; position: relative; color: inherit; fill: inherit;" tabindex="0"><div style="flex: 4 1 180px; padding: 12px 14px 14px; overflow: hidden; text-align: left;"><div style="font-size: 14px; line-height: 20px; color: rgb(55, 53, 47); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-height: 24px; margin-bottom: 2px;">Unity - Scripting API: Rendering.DrawingSettings.overrideMaterialPassIndex</div><div style="font-size: 12px; line-height: 16px; color: rgba(55, 53, 47, 0.65); height: 32px; overflow: hidden;">Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. For some reason your suggested change could not be submitted. Please try again in a few minutes.</div><div style="display: flex; margin-top: 6px;"><img src="3ceaaa1e4b11b056e8bac62cedc00cba704c5fe6.ico" style="width: 16px; height: 16px; min-width: 16px; margin-right: 6px;"/><div style="font-size: 12px; line-height: 16px; color: rgb(55, 53, 47); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">https://docs.unity3d.com/ScriptReference/Rendering.DrawingSettings-overrideMaterialPassIndex.html</div></div></div><div style="flex: 1 1 180px; display: block; position: relative;"><div style="position: absolute; inset: 0px;"><div style="width: 100%; height: 100%;"><img src="66d64bf95cb2e9a47f7e2136dc084c94eb72cb9f.jpg" style="display: block; object-fit: cover; border-radius: 1px; width: 100%; height: 100%;"/></div></div></div></div></a></div></div></div><div class="notion-selectable notion-text-block" data-block-id="5a381ee5-1201-4a32-b104-96beebac907f" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">이 두 가지가 된다면 OK. 우선 패스만 오버라이드 가능한지 테스트하기 위해서 URP 코드를 살짝 바꿔보자.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="10e2abb3-713b-45c1-9e19-244cd62e9e5e" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">RenderObjectPass.Execute()에서 아래 줄을 주석.</div></div></div></div><div class="notion-selectable notion-code-block" data-block-id="b7a368cf-0f21-4c51-932c-645fb13d84e6" style="width: 100%; max-width: 1718px; margin-top: 4px; margin-bottom: 4px;"><div style="display: flex;"><div contenteditable="false" data-content-editable-void="true" style="flex-grow: 1; border-radius: 3px; text-align: left; position: relative; background: rgb(247, 246, 243); min-width: 0px; width: 100%;"><div><div class="line-numbers notion-code-block" style="display: flex; overflow-x: auto;"><div autocapitalize="off" autocorrect="off" contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="false" style='flex-grow: 1; flex-shrink: 1; text-align: left; font-family: SFMono-Regular, Menlo, Consolas, "PT Mono", "Liberation Mono", Courier, monospace; font-size: 85%; tab-size: 2; padding: 34px 16px 32px 32px; min-height: 1em; color: rgb(55, 53, 47); white-space: pre;'><span class="token comment" data-token-index="0">//drawingSettings.overrideMaterial = overrideMaterial;</span><span>
</span></div></div></div><div style="position: absolute; top: 3px; right: 1px; color: rgba(55, 53, 47, 0.65); display: flex; align-items: center; justify-content: flex-end; height: 25px; font-size: 11.5px; opacity: 0; transition: opacity 300ms ease-in 0s;"><div style="color: rgba(55, 53, 47, 0.65); display: flex; align-items: center; justify-content: center; font-size: 12px; margin-top: 4px; margin-right: 4px;"><div class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; cursor: pointer; display: inline-flex; align-items: center; white-space: nowrap; height: 25px; border-radius: 3px 0px 0px 3px; font-size: 11.5px; line-height: 1.2; padding: 4px 6px; color: rgb(55, 53, 47); background: rgb(234, 233, 229); font-weight: 400;" tabindex="0"><svg class="copy" style="width: 16px; height: 16px; display: block; fill: inherit; flex-shrink: 0; backface-visibility: hidden; padding-right: 4px;" viewBox="0 0 14 16"><path d="M2.404 15.322h5.701c1.26 0 1.887-.662 1.887-1.927V12.38h1.154c1.254 0 1.91-.662 1.91-1.928V5.555c0-.774-.158-1.266-.626-1.74L9.512.837C9.066.387 8.545.21 7.865.21H5.463c-1.254 0-1.91.662-1.91 1.928v1.084H2.404c-1.254 0-1.91.668-1.91 1.933v8.239c0 1.265.656 1.927 1.91 1.927zm7.588-6.62c0-.792-.1-1.161-.592-1.665L6.225 3.814c-.452-.462-.844-.58-1.5-.591V2.215c0-.533.28-.832.843-.832h2.38v2.883c0 .726.386 1.113 1.107 1.113h2.83v4.998c0 .539-.276.832-.844.832H9.992V8.701zm-.79-4.29c-.206 0-.288-.088-.288-.287V1.594l2.771 2.818H9.201zM2.503 14.15c-.563 0-.844-.293-.844-.832V5.232c0-.539.281-.837.85-.837h1.91v3.187c0 .85.416 1.26 1.26 1.26h3.14v4.476c0 .54-.28.832-.843.832H2.504zM5.79 7.816c-.24 0-.346-.105-.346-.345V4.547l3.223 3.27H5.791z"></path></svg>Copy</div></div></div><div style="position: absolute; top: 8px; left: 8px; color: rgba(55, 53, 47, 0.65); display: flex; align-items: center; justify-content: flex-end; opacity: 0; transition: opacity 300ms ease-in 0s;"><div aria-disabled="true" class="notion-focusable" role="button" style="user-select: none; transition: background 20ms ease-in 0s; display: inline-flex; align-items: center; white-space: nowrap; height: 20px; border-radius: 3px; font-size: 12px; line-height: 1.2; padding-left: 5px; padding-right: 5px; color: rgba(55, 53, 47, 0.65); margin-right: 5px;" tabindex="-1">C#<svg class="chevronDown" style="width: 10px; height: 100%; display: block; fill: rgba(55, 53, 47, 0.35); flex-shrink: 0; backface-visibility: hidden; margin-left: 4px;" viewBox="0 0 30 30"><polygon points="15,17.4 4.8,7 2,9.8 15,23 28,9.8 25.2,7 "></polygon></svg></div></div><div style="background: white; padding-right: 105px;"></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="f041fdde-8738-4d66-9f79-e8e81586e20b" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">안된다 ㅠ 재질을 오버라이드해야만 패스를 바꿀 수 있다. 아.. 캐릭터가 한 명만 나오면 인스턴스화 된 재질을 찾아서 직접 넣어줄 텐데 여러 캐릭터가 나올 거라. 재질을 오버라이드하지 않고 패스만 오버라이드할 방법이 필요하다.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="83af206c-8e3c-477d-a207-602287a9e609" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">아! 생각의 방향이 잘못되었다. (이제야 깨달음을 얻었습니다. 이제부터가 최종 버전입니다.) 그냥 필터 설정에서 패스 이름을 UniversalForward가 아닌, 두 번째 패스의 LightMode 값을 넣어주면, 해당 패스로 그리게 된다.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="6d6a19f8-7056-4280-b632-e974e3aeec6f" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">셰이더에서 두 번째 패스에 태그를 이렇게 주고 Tags {“LightMode” = “HairAlphablending”} RenderObjects의 Shader Passes를 이렇게 주면 된다.</div></div></div></div><div class="notion-selectable notion-image-block" data-block-id="f2ece079-ebd3-4c45-9148-77730c153884" style="width: 454px; max-width: 1910px; align-self: center; margin-top: 4px; margin-bottom: 4px;"><div contenteditable="false" data-content-editable-void="true"><div style="display: flex;"><div class="notion-cursor-default" style="position: relative; overflow: hidden; flex-grow: 1;"><div style="position: relative;"><div><div style="height: 100%; width: 100%;"><img src="b499d3a20f96f4291a615da33750c09638ecbf1a.png" style="display: block; object-fit: cover; border-radius: 1px; pointer-events: auto; width: 100%;"/></div></div></div></div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="2f6801e1-baac-4194-ba6b-311bc07811ab" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 1px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">이렇게 하면 HairAlphablending이라는 LightMode 태그를 가진 셰이더 패스만 그려지게 되므로, 별도로 RenderingLayerMask 같은 것으로 필터링 할 필요도 없다. 헤어 셰이더만 HairAlphablending 패스를 가질테니까.</div></div></div></div><div class="notion-selectable notion-text-block" data-block-id="89953006-31ed-4294-8cac-cd039e7198e3" style="width: 100%; max-width: 1718px; margin-top: 1px; margin-bottom: 0px;"><div style="color: inherit; fill: inherit;"><div style="display: flex;"><div contenteditable="false" data-content-editable-leaf="true" placeholder=" " spellcheck="true" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">이렇게 해서 같은 셰이더 프로퍼티를 사용해서 불투명 패스, 투명 패스를 그리는 셰이더 구현 성공!</div></div></div></div></div></div><div contenteditable="false" data-content-editable-void="true" style="width: 0px;"><div style="display: none; flex-shrink: 0; pointer-events: none; width: 0px; position: absolute; right: 192px; opacity: 0;"><div style="display: flex; flex-direction: column; padding: 5px 16px; width: 340px; flex-shrink: 0; height: 100%; position: relative; pointer-events: none; z-index: 1;"><div style="position: absolute; pointer-events: none; width: 100%; height: 100%; top: -5px; background: linear-gradient(white 0px, rgba(255, 255, 255, 0) 15px);"></div></div></div></div></div><span style="height: 1px; width: 1px;"></span></div><div class="notion-presence-container" style="position: absolute; top: 0px; left: 0px; z-index: 1;"><div></div></div></div><div style="position: absolute; top: 0px; left: 0px;"><div></div></div></div></div></div></div></div><textarea style="opacity: 0; pointer-events: none; position: fixed; left: 0px; top: 0px;"></textarea><textarea style="opacity: 0; pointer-events: none; position: fixed; left: 0px; top: 0px;"></textarea><div style="width: env(safe-area-inset-bottom);"></div><iframe aria-hidden="true" referrerpolicy="no-referrer" sandbox="allow-scripts allow-same-origin" src="https://aif.notion.so/aif-production.html" style="position: absolute; opacity: 0; width: 1px; height: 1px; top: 0; left: 0; border: none; display: block; z-index: -1;" tabindex="-1"></iframe><script src="4f81ce7dd4fdfb05ecea2042ffef36115ac55ccf.js" type="text/javascript"></script><script async="async" crossorigin="anonymous" issue-term="pathname" repo="muscly/utterances" src="bb90085d45ae8c8eec8823469a33cc0853edb7d1.js" theme="github-light"></script></body></html>