Repository: ColinLeung-NiloCat/UnityURPToonLitShaderExample Branch: master Commit: eb0bb07d7b8e Files: 8 Total size: 131.0 KB Directory structure: gitextract_fv4bdsmq/ ├── LICENSE ├── NiloInvLerpRemap.hlsl ├── NiloOutlineUtil.hlsl ├── NiloZOffset.hlsl ├── README.md ├── SimpleURPToonLitOutlineExample.shader ├── SimpleURPToonLitOutlineExample_LightingEquation.hlsl └── SimpleURPToonLitOutlineExample_Shared.hlsl ================================================ FILE CONTENTS ================================================ ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2020 ColinLeung-NiloCat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: NiloInvLerpRemap.hlsl ================================================ // https://github.com/ronja-tutorials/ShaderTutorials/blob/master/Assets/047_InverseInterpolationAndRemap/Interpolation.cginc // edit float to half for optimization, because we usually use this to process color data(half) #ifndef Include_NiloInvLerpRemap #define Include_NiloInvLerpRemap // just like smoothstep(), but linear, not clamped half invLerp(half from, half to, half value) { return (value - from) / (to - from); } half invLerpClamp(half from, half to, half value) { return saturate(invLerp(from,to,value)); } // full control remap, but slower half remap(half origFrom, half origTo, half targetFrom, half targetTo, half value) { half rel = invLerp(origFrom, origTo, value); return lerp(targetFrom, targetTo, rel); } #endif ================================================ FILE: NiloOutlineUtil.hlsl ================================================ // For more information, visit -> https://github.com/ColinLeung-NiloCat/UnityURPToonLitShaderExample #ifndef Include_NiloOutlineUtil #define Include_NiloOutlineUtil // If your project has a faster way to get camera fov in shader, you can replace this slow function to your method. // For example, you write cmd.SetGlobalFloat("_CurrentCameraFOV",cameraFOV) using a new RendererFeature in C#. // For this tutorial shader, we will keep things simple and use this slower but convenient method to get camera fov float GetCameraFOV() { //https://answers.unity.com/questions/770838/how-can-i-extract-the-fov-information-from-the-pro.html float t = unity_CameraProjection._m11; float Rad2Deg = 180 / 3.1415; float fov = atan(1.0f / t) * 2.0 * Rad2Deg; return fov; } float ApplyOutlineDistanceFadeOut(float inputMulFix) { //make outline "fadeout" if character is too small in camera's view return saturate(inputMulFix); } float GetOutlineCameraFovAndDistanceFixMultiplier(float positionVS_Z) { float cameraMulFix; if(unity_OrthoParams.w == 0) { //////////////////////////////// // Perspective camera case //////////////////////////////// // keep outline similar width on screen accoss all camera distance cameraMulFix = abs(positionVS_Z); // can replace to a tonemap function if a smooth stop is needed cameraMulFix = ApplyOutlineDistanceFadeOut(cameraMulFix); // keep outline similar width on screen accoss all camera fov cameraMulFix *= GetCameraFOV(); } else { //////////////////////////////// // Orthographic camera case //////////////////////////////// float orthoSize = abs(unity_OrthoParams.y); orthoSize = ApplyOutlineDistanceFadeOut(orthoSize); cameraMulFix = orthoSize * 50; // 50 is a magic number to match perspective camera's outline width } return cameraMulFix * 0.00005; // mul a const to make return result = default normal expand amount WS } #endif ================================================ FILE: NiloZOffset.hlsl ================================================ // For more information, visit -> https://github.com/ColinLeung-NiloCat/UnityURPToonLitShaderExample #ifndef Include_NiloZOffset #define Include_NiloZOffset // Push an imaginary vertex towards camera in view space (linear, view space unit), // then only overwrite original positionCS.z using imaginary vertex's result positionCS.z value // Will only affect ZTest ZWrite's depth value of vertex shader // Useful for: // -Hide ugly outline on face/eye // -Make eyebrow render on top of hair // -Solve ZFighting issue without moving geometry float4 NiloGetNewClipPosWithZOffset(float4 originalPositionCS, float viewSpaceZOffsetAmount) { if(unity_OrthoParams.w == 0) { //////////////////////////////// //Perspective camera case //////////////////////////////// float2 ProjM_ZRow_ZW = UNITY_MATRIX_P[2].zw; float modifiedPositionVS_Z = -originalPositionCS.w + -viewSpaceZOffsetAmount; // push imaginary vertex float modifiedPositionCS_Z = modifiedPositionVS_Z * ProjM_ZRow_ZW[0] + ProjM_ZRow_ZW[1]; originalPositionCS.z = modifiedPositionCS_Z * originalPositionCS.w / (-modifiedPositionVS_Z); // overwrite positionCS.z return originalPositionCS; } else { //////////////////////////////// //Orthographic camera case //////////////////////////////// originalPositionCS.z += -viewSpaceZOffsetAmount / _ProjectionParams.z; // push imaginary vertex and overwrite positionCS.z return originalPositionCS; } } #endif ================================================ FILE: README.md ================================================ # About this repository This repository does NOT contain the full version of NiloToonURP. Instead, it includes a simple, short and easy-to-read URP toon shader example for Unity2022.3LTS, which is intended for shader coding tutorial purposes. The shader example is licensed under the MIT license, giving you the freedom to use the code as you wish. If you'd like to retain the current tutorial shader, we recommend forking it or downloading a copy now, as it may be removed in the future. *this README also shows photos and information about the NiloToonURP(full version) # NiloToonURP(full version)'s rendering ![screenshot](https://i.imgur.com/lfu2wZd.jpg) ![screenshot](https://i.imgur.com/F0nlZYh.jpg) shader ON ![screenshot](https://i.imgur.com/fSpM9zM.jpg) shader OFF ![screenshot](https://i.imgur.com/91vkMJk.jpg) shader ON ![screenshot](https://i.imgur.com/N7J2A28.jpg) shader OFF ![screenshot](https://i.imgur.com/9tiHehF.jpg) shader ON ![screenshot](https://i.imgur.com/195Mzq7.jpg) shader OFF ![screenshot](https://i.imgur.com/zFk6dHl.jpg) ![screenshot](https://i.imgur.com/EIq6z9B.jpg) Outline options(1/2/3) ![screenshot](https://i.imgur.com/Vkx0oN9.gif) ![screenshot](https://i.imgur.com/wUrVD7n.jpg) ![screenshot](https://i.imgur.com/aP3YmYV.jpg) ![screenshot](https://i.imgur.com/FxIv1Yl.jpg) ![screenshot](https://i.imgur.com/XW5aNL4.jpg) shader ON ![screenshot](https://i.imgur.com/VlA6hU6.jpg) shader OFF ![screenshot](https://i.imgur.com/o1xm92a.jpg) ![screenshot](https://i.imgur.com/6dtu43p.jpg) ![screenshot](https://i.imgur.com/UyXuss9.jpg) ![screenshot](https://i.imgur.com/UbtyddV.jpg) ![screenshot](https://i.imgur.com/jUrwwLb.jpg) ![screenshot](https://i.imgur.com/ZSBwaHo.jpg) ![screenshot](https://i.imgur.com/WccM1g8.jpg) ![screenshot](https://i.imgur.com/i4O6m4z.jpg) We are now developing an 'easy-to-use, high-performance, and cross-platform (including mobile, VR, and WebGL)' closed-source toon shader package—NiloToonURP—to assist Unity URP users in achieving high-quality anime/toon-like rendering. NiloToonURP is supporting: - Unity 2021.3LTS(URP 12.x) - Unity 2022.3LTS(URP 14.x) - Unity 2023.2 (URP 16.x) - Unity6 (URP 17.x) # Download NiloToonURP PC .exe demo (2021.3.17LTS build): - https://drive.google.com/file/d/1MubGDhlDRKKxR9xyl7fcLyECyBJdsqrI/view?usp=sharing # Download NiloToonURP Android .apk demo (2021.3.17LTS build): - https://drive.google.com/file/d/1CBSYiniHTAaNtlkd5X7TUxjAsQ7eBNxK/view?usp=sharing # NiloToonURP's demo runtime video: - https://www.youtube.com/c/colinleungNiloCat/videos - https://space.bilibili.com/325873 # NiloToonURP's UI preview: - https://drive.google.com/drive/folders/1SlOhvqCZrDBRkSgzwW0ZIzAkDqonpa26?usp=sharing # How to get NiloToonURP full source code? If you or your company/organization/team needs: - latest full source code (with all detail comments and notes, NOT Obfuscated code, NOT .dll) - latest user document - perpetual royalty-free commercial license - every future update - NiloToon's tech support - (optional) we set up your character models's rendering in the best way possible for you, using NiloToonURP - (optional) your project-specific customization and support of NiloToonURP for your URP project, please send the following info to nilotoon@gmail.com - name (your personal name or your company/organization/team's name) - a google account email for gaining permission to download all NiloToonURP files in google drive - any public website that shows your/your company/organization/team's work or public media (e.g. personal website/company website/youtube/bilibili/twitter...) # NiloToonURP user's creations (public media, not NDA content) *we only provided NiloToonURP's download permission + tech support, we didn't work on these creations directly ### Genshin Impact MV - When The Stars Align (Genshin Impact website -> http://genshin.hoyoverse.com) ![screenshot](https://i.imgur.com/RermmVG.jpg) ![screenshot](https://i.imgur.com/VD7K3zX.jpg) ![screenshot](https://i.imgur.com/sQeT2h9.jpg) ![screenshot](https://i.imgur.com/xIY8OjB.jpg) ![screenshot](https://i.imgur.com/Cw9ZkkA.jpg) ![screenshot](https://i.imgur.com/dSsZo49.jpg) ![screenshot](https://i.imgur.com/pKciABD.jpg) ![screenshot](https://i.imgur.com/pUGytbt.jpg) ![screenshot](https://i.imgur.com/WXCPzCj.jpg) ![screenshot](https://i.imgur.com/xCbVHYf.jpg) ![screenshot](https://i.imgur.com/AxOlQ1V.jpg) ![screenshot](https://i.imgur.com/N9DfuWO.jpg) ![screenshot](https://i.imgur.com/ozunRqI.jpg) ![screenshot](https://i.imgur.com/bEjNiOj.jpg) - 【原神生日会】When The Stars Align -> https://www.bilibili.com/video/BV1vT411T79n ### キラッとプリ⭐︎チャン (https://twitter.com/pretty_vlive) ![screenshot](https://i.imgur.com/Ul1u4hz.jpg) ![screenshot](https://i.imgur.com/hJPCGmE.jpg) ![screenshot](https://i.imgur.com/qwcCPN0.jpg) ![screenshot](https://i.imgur.com/JbZRJXG.jpg) ![screenshot](https://i.imgur.com/TwBlQe0.jpg) ![screenshot](https://i.imgur.com/FnpWMuV.jpg) ![screenshot](https://i.imgur.com/frhGcNt.jpg) ![screenshot](https://i.imgur.com/8suihAg.jpg) ![screenshot](https://i.imgur.com/RCo6T3s.jpg) ![screenshot](https://i.imgur.com/apSrmFa.jpg) ![screenshot](https://i.imgur.com/SdgQvOA.jpg) ![screenshot](https://i.imgur.com/pTyaOOW.jpg) ![screenshot](https://i.imgur.com/gSJLGDF.jpg) ![screenshot](https://i.imgur.com/AtJqovW.jpg) - バーチャルミュージカル「ハイスクール!キラッとプリ☆チャン ~キラキラ☆未来の運命~」 -> https://www.zan-live.com/ja/live/detail/10395 ### VSPO!(ぶいすぽっ!) - 空澄セナ -Asumi Sena- (https://www.youtube.com/@asumi_sena) ![screenshot](https://i.imgur.com/QQco4TK.jpg) ![screenshot](https://i.imgur.com/fWkpEF8.jpg) ![screenshot](https://i.imgur.com/wBlNuYi.jpg) ![screenshot](https://i.imgur.com/B2gnt6M.jpg) ![screenshot](https://i.imgur.com/cIGqIeB.jpg) ![screenshot](https://i.imgur.com/4fdkINy.jpg) ![screenshot](https://i.imgur.com/tLFP24Z.jpg) ![screenshot](https://i.imgur.com/lQ7fd0U.jpg) ![screenshot](https://i.imgur.com/hmTzJbs.jpg) ![screenshot](https://i.imgur.com/KcIz27F.jpg) - [【#空澄セナ4周年記念LIVE】~私がここにいる理由~ 【空澄セナ/ぶいすぽっ!】](https://www.youtube.com/live/rFmmP-8AfHs?si=_iu6meNxc53i4WYF&t=1003) - [- デビルじゃないもん w/星川サラ](https://www.youtube.com/live/rFmmP-8AfHs?si=6lFF51APLpsNbgI-&t=1323) - [【#空澄セナ3D】you - 雪野五月(ひぐらしのなく頃に) / Covered by 空澄セナ](https://www.youtube.com/live/rFmmP-8AfHs?si=9ptMwqWhu3x6AToI&t=3116) ### Suisei Channel - hololive (https://www.youtube.com/@HoshimachiSuisei) ![screenshot](https://i.imgur.com/XX23J0Q.jpg) ![screenshot](https://i.imgur.com/MMbNWCA.jpg) ![screenshot](https://i.imgur.com/x4PLSHc.jpg) ![screenshot](https://i.imgur.com/G7L6O6u.jpg) ![screenshot](https://i.imgur.com/kdG28ik.jpg) ![screenshot](https://i.imgur.com/CTOI2aK.jpg) ![screenshot](https://i.imgur.com/b5Ku6pB.jpg) ![screenshot](https://i.imgur.com/jh3AMVa.jpg) ![screenshot](https://i.imgur.com/jWLC9wA.jpg) ![screenshot](https://i.imgur.com/STP9tAD.jpg) ![screenshot](https://i.imgur.com/4BCD4O0.jpg) ![screenshot](https://i.imgur.com/QeJhkWk.jpg) ![screenshot](https://i.imgur.com/Pvb7u7X.jpg) ![screenshot](https://i.imgur.com/WWmhvl8.jpg) ![screenshot](https://i.imgur.com/4xlD9UM.jpg) - [シュガーラッシュ / miComet(official)](https://youtu.be/gtgME6MJpk4?si=cIsl6r1l8eSqd4Fl) ### 이세계아이돌 ISEGYE IDOL / WAKTAVERSE (https://www.youtube.com/@isegyeidol_ofcl) ![screenshot](https://i.imgur.com/xWpU5ka.jpg) ![screenshot](https://i.imgur.com/KgbGa48.jpg) ![screenshot](https://i.imgur.com/jrVVnz6.jpg) ![screenshot](https://i.imgur.com/NaSqCMi.jpg) ![screenshot](https://i.imgur.com/OpBjNK9.jpg) ![screenshot](https://i.imgur.com/qevzQ9I.jpg) ![screenshot](https://i.imgur.com/8gHCs6g.jpg) ![screenshot](https://i.imgur.com/M8YnsZq.jpg) ![screenshot](https://i.imgur.com/FolrHVi.jpg) ![screenshot](https://i.imgur.com/ZSqglHO.jpg) ![screenshot](https://i.imgur.com/hTeCSiG.jpg) - [이세계아이돌(ISEGYE IDOL) 'Nameless' Official Performance MV](https://youtu.be/fff8P0kYexQ?si=TePQtlm39tEaEwx3) ### WAKTAVERSE - 이세계아이돌/IsegyeIdol (https://www.youtube.com/@waktaverse) ![screenshot](https://i.imgur.com/8DDcN1B.jpg) ![screenshot](https://i.imgur.com/PaZN6M8.jpg) ![screenshot](https://i.imgur.com/gsSU1sF.jpg) ![screenshot](https://i.imgur.com/0TjHy21.jpg) ![screenshot](https://i.imgur.com/ZgDVDyL.jpg) ![screenshot](https://i.imgur.com/Eqkxs0k.jpg) ![screenshot](https://i.imgur.com/AAmAoT0.jpg) ![screenshot](https://i.imgur.com/VnymUeL.jpg) ![screenshot](https://i.imgur.com/b3TrbrP.jpg) ![screenshot](https://i.imgur.com/yWQr1rR.jpg) - [Snow halation - 이세계아이돌 COVER│러브 라이브! OST](https://youtu.be/PdvAad_k1w4?si=XAeJjWeNi85CF93W) ### 하데스 HADES (https://www.youtube.com/@HADES_offi) ![screenshot](https://i.imgur.com/FHeVhp2.jpg) ![screenshot](https://i.imgur.com/i39GOi0.jpg) ![screenshot](https://i.imgur.com/toRkbmy.jpg) ![screenshot](https://i.imgur.com/JkLVagx.jpg) ![screenshot](https://i.imgur.com/XYaVqvN.jpg) ![screenshot](https://i.imgur.com/gBz6uuI.jpg) ![screenshot](https://i.imgur.com/mG1arIy.jpg) ![screenshot](https://i.imgur.com/dJhU1xk.jpg) ![screenshot](https://i.imgur.com/iyCga8M.jpg) - [하데스 (HADES) '두번째 지구(Planet B)' Official MV] (https://youtu.be/hRlt2L-MJKU?si=NsZHvALtrwGQfnij) ### VSPO!(ぶいすぽっ!) - 胡桃のあ (https://www.youtube.com/@963Noah) ![screenshot](https://i.imgur.com/bRNlOWG.jpg) ![screenshot](https://i.imgur.com/Ffuybg8.jpg) ![screenshot](https://i.imgur.com/xewWdKO.jpg) ![screenshot](https://i.imgur.com/TdYcCSz.jpg) ![screenshot](https://i.imgur.com/7itrZ89.jpg) ![screenshot](https://i.imgur.com/Ro1uw6s.jpg) ![screenshot](https://i.imgur.com/B1zzDqV.jpg) ![screenshot](https://i.imgur.com/lTYv5uO.jpg) ![screenshot](https://i.imgur.com/ThgxjXs.jpg) - #胡桃のあ3Dライブ│ 星降る夜に願いを込めて 🌠 -> https://www.youtube.com/live/otBLdDjhmp4?si=4YsH2jpEedQ7UaHK&t=1875 ### VVV MUSIC LIVE 公式(ブイスリー) (https://twitter.com/VVVMusicLive) ![screenshot](https://i.imgur.com/9Xi2ae3.jpg) ![screenshot](https://i.imgur.com/7ioCq51.jpg) ![screenshot](https://i.imgur.com/7YcVoPO.jpg) ![screenshot](https://i.imgur.com/SWOr8Gh.jpg) ![screenshot](https://i.imgur.com/s8YWX0N.jpg) ![screenshot](https://i.imgur.com/4wkNyIJ.jpg) ![screenshot](https://i.imgur.com/VDFnNm2.jpg) ![screenshot](https://i.imgur.com/rnJo98j.jpg) ![screenshot](https://i.imgur.com/kI65eW8.jpg) - [VVV MUSIC LIVE 2023 RE:TUNE【第1部】](https://live.nicovideo.jp/watch/lv344122922) - [VVV MUSIC LIVE 2023 RE:TUNE - X Preview 1](https://twitter.com/VVVMusicLive/status/1772926536095850622) - [VVV MUSIC LIVE 2023 RE:TUNE - X Preview 2](https://twitter.com/VVVMusicLive/status/1773288934870839380) - [VVV MUSIC LIVE 2023 RE:TUNE - X Preview 3](https://twitter.com/VVVMusicLive/status/1773651312409813377) - [VVV MUSIC LIVE 2023 RE:TUNE - X Preview 4](https://twitter.com/VVVMusicLive/status/1774013705090371721) ### 泠鸢yousa (https://space.bilibili.com/282994) ![screenshot](https://i.imgur.com/Y5ZqAQR.jpg) ![screenshot](https://i.imgur.com/Jx2hWbF.jpg) ![screenshot](https://i.imgur.com/lWlwyQj.jpg) ![screenshot](https://i.imgur.com/42ZWOk4.jpg) ![screenshot](https://i.imgur.com/SBuq9fg.jpg) ![screenshot](https://i.imgur.com/JxshOYt.jpg) ![screenshot](https://i.imgur.com/N87LdKE.jpg) ![screenshot](https://i.imgur.com/eKaaJS2.jpg) ![screenshot](https://i.imgur.com/7Cab1UP.jpg) - 《我的故事未写完》【原创曲-泠鸢词曲】 -> https://www.bilibili.com/video/BV1JG4y1W7ub ### hololive ホロライブ - VTuber Group (https://www.youtube.com/@hololive) ![screenshot](https://i.imgur.com/Qrexl3d.jpg) ![screenshot](https://i.imgur.com/BnvXUik.jpg) ![screenshot](https://i.imgur.com/JGOzDqK.jpg) ![screenshot](https://i.imgur.com/OOqILCu.jpg) ![screenshot](https://i.imgur.com/ngu3bM3.jpg) ![screenshot](https://i.imgur.com/txbqSyH.jpg) ![screenshot](https://i.imgur.com/Io4Mjcf.jpg) ![screenshot](https://i.imgur.com/oMlV5Kk.jpg) ![screenshot](https://i.imgur.com/qyxZXew.jpg) ![screenshot](https://i.imgur.com/eFNnSlt.jpg) ![screenshot](https://i.imgur.com/riHY7nk.jpg) - 『ホロライブ・サマー2023 3DLIVE Splash Party!』ティザーPV【#hololivesummer2023】 -> https://youtu.be/8aKFN2YbGLQ ### 杏仁ミル Annin Miru Channel (https://www.youtube.com/@AnninMiru) ![screenshot](https://i.imgur.com/ynQZIdr.jpg) ![screenshot](https://i.imgur.com/rmpF7lb.jpg) ![screenshot](https://i.imgur.com/f2SJHtG.jpg) ![screenshot](https://i.imgur.com/6Prfcc3.jpg) ![screenshot](https://i.imgur.com/ep6Cxym.jpg) ![screenshot](https://i.imgur.com/QI9xM6x.jpg) ![screenshot](https://i.imgur.com/RRPgbSQ.jpg) ![screenshot](https://i.imgur.com/oAgTkxU.jpg) ![screenshot](https://i.imgur.com/qkJO7Cr.jpg) ![screenshot](https://i.imgur.com/4gkLntJ.jpg) ![screenshot](https://i.imgur.com/QzvwSx3.jpg) - [【3D LIVE映像】Rabbit - Cover by 杏仁ミルxRumi懶貓子【#杏仁ミル 5周年LIVE影像】](https://www.youtube.com/watch?v=iCo2gQCupvs&list=PLHHwxaEhb01NztWik7JRj7CCKH8wQ6eI-&index=6) - [【3D LIVE映像】ライオン - Cover by 杏仁ミル x カグラナナ【#杏仁ミル 5周年LIVE影像】](https://www.youtube.com/watch?v=u4kN1qDqRx0&list=PLHHwxaEhb01NztWik7JRj7CCKH8wQ6eI-&index=13) - [【3D LIVE映像】チョコレートディスコ - Cover by 杏仁ミル x 久遠たま x 花丸はれる【#杏仁ミル 5周年LIVE影像】](https://youtu.be/qeTaEnlpRJI?si=QcZh7glczm_99Gaa) - [【3D LIVE映像】ハートビート・フロムユー - Cover by 杏仁ミル【#杏仁ミル 5周年LIVE影像】](https://www.youtube.com/watch?v=4cnekD1wk30&list=PLHHwxaEhb01NztWik7JRj7CCKH8wQ6eI-&index=10) - [【3D LIVE映像】おねだり大作戦 - Cover by 杏仁ミル【#杏仁ミル 5周年LIVE影像】](https://www.youtube.com/watch?v=0xC972nEMYM&list=PLHHwxaEhb01NztWik7JRj7CCKH8wQ6eI-&index=12) - [【3D LIVE映像】僕らのレットイットビー - Cover by 杏仁ミル【#杏仁ミル 5周年LIVE影像】](https://youtu.be/LagMYTFRq1Y?si=2OC3dtxNGjq5adcj) - [【3D LIVE映像】おじゃま虫 - Cover by 杏仁ミル【#杏仁ミル 5周年LIVE影像】](https://youtu.be/NC_Yr18wLq4?si=QanNLNz157gIT2WA) - [【3D LIVE映像】ドレミファロンド - Cover by 杏仁ミル【#杏仁ミル 5周年LIVE影像】](https://youtu.be/6FxpGLUvw8M?si=7N-pU8-E5dBcSFmV) - [【#杏仁ミル5周年LIVE】Back To A Beginner's Spirit | 回歸初心3D演唱會【#杏仁ミル】(Youtube)](https://youtu.be/lx7kct7BNes?si=ZY9BnyK6_D0i-vTv&t=3272) - [【#杏仁ミル5周年LIVE】Back To A Beginner's Spirit | 回歸初心3D演唱會【#杏仁ミル】(Twitch)](https://www.twitch.tv/videos/2014344400?t=00h54m30s) ### Nakiri Ayame Ch. 百鬼あやめ (https://www.youtube.com/@NakiriAyame) ![screenshot](https://i.imgur.com/HVRegbq.jpeg) ![screenshot](https://i.imgur.com/Q7B7B80.jpeg) ![screenshot](https://i.imgur.com/Mw00Pu9.jpeg) ![screenshot](https://i.imgur.com/GOteVM7.jpeg) ![screenshot](https://i.imgur.com/z5n6ERp.jpeg) ![screenshot](https://i.imgur.com/ImUIyNH.jpeg) ![screenshot](https://i.imgur.com/vzue3yt.jpeg) ![screenshot](https://i.imgur.com/XoepnYb.jpeg) ![screenshot](https://i.imgur.com/nFDTg0r.jpeg) ![screenshot](https://i.imgur.com/MuV8Ntv.jpeg) ![screenshot](https://i.imgur.com/qdeMFkp.jpeg) ![screenshot](https://i.imgur.com/xyoUpqy.jpeg) ![screenshot](https://i.imgur.com/ODfkV4j.jpeg) ![screenshot](https://i.imgur.com/rvEdwfw.jpeg) ![screenshot](https://i.imgur.com/KCwdQvM.jpeg) - [花吹雪 / 百鬼あやめ original](https://youtu.be/aOcYn6YAO5E?si=pB8RJAXIzPk_CSZ4) ### ISEGYE IDOL (이세계아이돌) - 주르르 JURURU (https://www.youtube.com/@JU_RURU) ![screenshot](https://i.imgur.com/acdR9Lj.jpg) ![screenshot](https://i.imgur.com/DUq6AlZ.jpg) ![screenshot](https://i.imgur.com/ZOT96go.jpg) ![screenshot](https://i.imgur.com/SSKKyLY.jpg) ![screenshot](https://i.imgur.com/l0W9J72.jpg) ![screenshot](https://i.imgur.com/nC3nGFo.jpg) ![screenshot](https://i.imgur.com/v7NusDY.jpg) ![screenshot](https://i.imgur.com/Ytln6oQ.jpg) ![screenshot](https://i.imgur.com/XAL2vEg.jpg) ![screenshot](https://i.imgur.com/yGgFYYB.jpg) ![screenshot](https://i.imgur.com/R9Sq8bw.jpg) - [GIRL'S DAY - Darling|Cover by Jururu](https://youtu.be/7sFIjj5BW3M?si=xySDbq-FxfX-KPWJ) ### ぶいごまチャンネル V後藤真希 (https://www.youtube.com/@V_GOTO_MAKI) ![screenshot](https://i.imgur.com/gFAPtTS.jpg) ![screenshot](https://i.imgur.com/hI9cd0g.jpg) ![screenshot](https://i.imgur.com/9gcADgz.jpg) ![screenshot](https://i.imgur.com/EWcR7xg.jpg) ![screenshot](https://i.imgur.com/RBnZmGK.jpg) ![screenshot](https://i.imgur.com/okgCZ5b.jpg) ![screenshot](https://i.imgur.com/6yXHYed.jpg) ![screenshot](https://i.imgur.com/gZpw73O.jpg) ![screenshot](https://i.imgur.com/c4II8j3.jpg) ![screenshot](https://i.imgur.com/N426j2R.jpg) ![screenshot](https://i.imgur.com/r44ixaR.jpg) - モーニング娘。『LOVEマシーン』 / V後藤真希が歌って踊ってみた -> https://youtu.be/zyuLj0fbn9w?si=ovX0OF4bOx-wscD2 ### VSPO!(ぶいすぽっ!) - 小森めと (https://www.youtube.com/@Met_Komori) ![screenshot](https://i.imgur.com/G8slEDj.jpg) ![screenshot](https://i.imgur.com/UzofUqj.jpg) ![screenshot](https://i.imgur.com/APcD4Cy.jpg) ![screenshot](https://i.imgur.com/Z6sGj3c.jpg) ![screenshot](https://i.imgur.com/Cx0qTOb.jpg) ![screenshot](https://i.imgur.com/ILqORSQ.jpg) ![screenshot](https://i.imgur.com/s9dyTJP.jpg) ![screenshot](https://i.imgur.com/ppVwAsN.jpg) ![screenshot](https://i.imgur.com/BHzmmYt.jpg) - 【 #小森めと爆誕2023 】小森めと爆誕3Dライブ!~食え!寝ろ!遊べ!~ 【 ぶいすぽっ! / 小森めと 】 -> https://www.youtube.com/live/buF_TtzS9SA?si=vU6pt_XNCuwr5CB6&t=179 ### Veibae (https://www.youtube.com/@Veibae) ![screenshot](https://i.imgur.com/EfJUnkz.jpg) ![screenshot](https://i.imgur.com/wXHOoIa.jpg) ![screenshot](https://i.imgur.com/dDdoZnB.jpg) ![screenshot](https://i.imgur.com/BoK7p87.jpg) ![screenshot](https://i.imgur.com/H5oVtXj.jpg) ![screenshot](https://i.imgur.com/sQTNs6S.jpg) ![screenshot](https://i.imgur.com/xidweRe.jpg) ![screenshot](https://i.imgur.com/voydXQ4.jpg) ![screenshot](https://i.imgur.com/Q6pwhNT.jpg) ![screenshot](https://i.imgur.com/h26aQOn.jpg) - [[17.02.2024] Vei - 3D Comeback Stream (new 3D model debut)](https://youtu.be/mTeJOx-487s?si=Mbb5leehGoQXSF3-&t=1805) - [whatcha lookin at](https://twitter.com/Veibae/status/1758207305479336311) - [omw back to streamin as 3d 😳](https://twitter.com/Veibae/status/1751654864726507959) - [butt \ʕ •ᴥ•ʔ/](https://twitter.com/Veibae/status/1760078411937034745) - [bumpin heads](https://twitter.com/Veibae/status/1758589960590852408) - [Veibae vs Buckshot Roulette](https://youtu.be/d67CvouX68M?si=-sDEIyC7GCa2hmuT) - [raaaaaaaaaaarrrr](https://twitter.com/Veibae/status/1772694929422119048) ### Starseed:Asnia Trigger / 스타시드: 아스니아 트리거 ([starseed.com2us.com](https://starseed.com2us.com/)) ![screenshot](https://i.imgur.com/W6zA3ZV.jpg) ![screenshot](https://i.imgur.com/KtQAiRJ.jpg) ![screenshot](https://i.imgur.com/PQbcTYi.jpg) ![screenshot](https://i.imgur.com/6ljWdZ4.jpg) ![screenshot](https://i.imgur.com/IYKvGE0.jpg) ![screenshot](https://i.imgur.com/xUWxSWv.jpg) ![screenshot](https://i.imgur.com/HzI4y9D.jpg) ![screenshot](https://i.imgur.com/Kf3wvxB.jpg) ![screenshot](https://i.imgur.com/HsxHq0S.jpg) ![screenshot](https://i.imgur.com/b0naICA.jpg) - [Starseed:Asnia Trigger - X](https://twitter.com/STARSEED_KR) - [Mobile GamePlay](https://youtu.be/4foNIb2-i1E?si=sujfks8YxXpn-Zk6) ### ironmouse (https://www.youtube.com/@IronMouseParty) ![screenshot](https://i.imgur.com/NKNhYxf.jpeg) ![screenshot](https://i.imgur.com/LjUyOnO.jpg) ![screenshot](https://i.imgur.com/KOIrxpi.jpg) ![screenshot](https://i.imgur.com/Cz8it7F.jpeg) ![screenshot](https://i.imgur.com/n3VncPQ.jpeg) ![screenshot](https://i.imgur.com/5ZKX94S.jpeg) ![screenshot](https://i.imgur.com/htIMY6k.jpeg) ![screenshot](https://i.imgur.com/FSL0oLB.jpeg) ![screenshot](https://i.imgur.com/e8Ywqzj.jpeg) ![screenshot](https://i.imgur.com/NYKHZov.jpeg) ![screenshot](https://i.imgur.com/H5MkTUA.jpeg) ![screenshot](https://i.imgur.com/mWHKKhZ.jpeg) - [How It's Done - Ironmouse & Mori Calliope](https://youtu.be/P1_2JehaKOw?si=jNKFfhcZUi5QRq18) - [Abracadabra - Ironmouse](https://www.youtube.com/watch?v=DGyphTQHV7w) - [Alicia/Lumiere Clair Obscur: Expedition 33 - Ironmouse, Nerissa Ravencroft, & Elizabeth Bloodflame](https://youtu.be/9FtpzAqIPIU?si=F2OIcA0XhQ90nnsn) - [Daidaidaidaidaikirai - Hatsune Miku VS Kasane Teto (Cover)](https://youtu.be/gFmrDB-99fU?si=E4zEovrauQCo8G5G) ### Neo-Porte(ネオポルテ)- 天帝フォルテ / Tentei Forte (https://www.youtube.com/@tenteiforte4631) ![screenshot](https://i.imgur.com/AJRw1g8.jpg) ![screenshot](https://i.imgur.com/MFMZThA.jpg) ![screenshot](https://i.imgur.com/q4loeqX.jpg) ![screenshot](https://i.imgur.com/4sBONjf.jpg) ![screenshot](https://i.imgur.com/HhyFlkI.jpg) ![screenshot](https://i.imgur.com/6AoJNqt.jpg) ![screenshot](https://i.imgur.com/Kqh1Uem.jpg) ![screenshot](https://i.imgur.com/3KiFI7U.jpg) ![screenshot](https://i.imgur.com/ivZ4zVr.jpg) ![screenshot](https://i.imgur.com/iFcIs0y.jpg) - [【#天帝フォルテ3D】動くのか…!?動けるのか…!?3Dお披露目!【天帝フォルテ / ネオポルテ】](https://www.youtube.com/live/yuV3gcmt5lg?si=wDN36D7yszt4kEB_&t=197) - [- 晩餐歌](https://www.youtube.com/live/yuV3gcmt5lg?si=EXO8wc28qo4FuG3s&t=1538) ### Bao The Whale (https://www.youtube.com/@baovtuber) ![screenshot](https://i.imgur.com/FhjBan9.jpeg) ![screenshot](https://i.imgur.com/JuV8Q6c.jpeg) ![screenshot](https://i.imgur.com/3ok3Bjf.jpeg) ![screenshot](https://i.imgur.com/8RFZ8r9.jpeg) ![screenshot](https://i.imgur.com/kV3TWzl.jpeg) ![screenshot](https://i.imgur.com/0tr8EoZ.jpeg) ![screenshot](https://i.imgur.com/cRajfCt.jpeg) ![screenshot](https://i.imgur.com/zhPJ6f7.jpeg) - [Bao The Whale - Final Bow (Original Song 3D MV)](https://youtu.be/R_nS5XjiFxA?si=oPapEN5m8ojQumGj) ### Watame Ch. 角巻わため (https://www.youtube.com/@TsunomakiWatame) ![screenshot](https://i.imgur.com/WHp12gf.jpeg) ![screenshot](https://i.imgur.com/nDnHOeV.jpeg) ![screenshot](https://i.imgur.com/nJ4jxp3.jpeg) ![screenshot](https://i.imgur.com/SByfumx.jpeg) ![screenshot](https://i.imgur.com/ybBeITH.jpeg) ![screenshot](https://i.imgur.com/V0jcRdO.jpeg) ![screenshot](https://i.imgur.com/PXLDz1r.jpeg) ![screenshot](https://i.imgur.com/8Kw1VmW.jpeg) ![screenshot](https://i.imgur.com/5nGgjRU.jpeg) ![screenshot](https://i.imgur.com/z0r6Qwm.jpeg) ![screenshot](https://i.imgur.com/rZgLqJz.jpeg) ![screenshot](https://i.imgur.com/uVtgf0a.jpeg) ![screenshot](https://i.imgur.com/Ii5HBSJ.jpeg) - [ビリ/角巻わため【original】](https://youtu.be/cVT_yB1qpYY?si=q1sNWZckxjhz_5ac) ### VirtuaReal / Nijisanji CN - 七海Nana7mi (https://space.bilibili.com/434334701) ![screenshot](https://i.imgur.com/Tp29cyb.jpg) ![screenshot](https://i.imgur.com/9OsMvwh.jpg) ![screenshot](https://i.imgur.com/HTBHcYg.jpg) ![screenshot](https://i.imgur.com/PvSWEwl.jpg) - [【恋愛偏差値上昇中!】](https://www.bilibili.com/video/BV1v84y1K74A) - [【情人节当一天恋爱脑也可以吧!】](https://www.bilibili.com/video/BV1wv4y1x7NZ) - [【这次是全身版!!】](https://www.bilibili.com/video/BV1QM411b7pe) - [【因为我是最棒滴!【僕が最高だから/ハコニワリリィ】】](https://www.bilibili.com/video/BV1rs4y1S7uB) ### vα-liv公式📣ヴイアラ (https://x.com/valiv_official) ![screenshot](https://i.imgur.com/19TAMmZ.jpeg) - [愛夏2nd single「あっちこっちプリンセス」](https://youtu.be/GYs17lN2-zY) - [宇宙2nd single「クライヤ」](https://youtu.be/_57ECmqYSFA) - [レトラ2nd single「きみの一等星」](https://youtu.be/jaKbwrZC8-I) ![screenshot](https://i.imgur.com/FWta9F6.jpeg) ![screenshot](https://i.imgur.com/63pDCei.jpeg) ![screenshot](https://i.imgur.com/QkgPfad.jpeg) ![screenshot](https://i.imgur.com/xPsTiy4.jpeg) ### 사탄의 부러진 뿔 (https://www.youtube.com/@geumjaBBul) ![screenshot](https://i.imgur.com/rphWmH5.jpeg) ![screenshot](https://i.imgur.com/ZGSFrlt.jpeg) ![screenshot](https://i.imgur.com/tXRN1T0.jpeg) ![screenshot](https://i.imgur.com/ycCSScE.jpeg) ![screenshot](https://i.imgur.com/pqyxdOL.jpeg) ![screenshot](https://i.imgur.com/rJGCVgZ.jpeg) ![screenshot](https://i.imgur.com/qgA2h3C.jpeg) ![screenshot](https://i.imgur.com/9b10W1U.jpeg) ![screenshot](https://i.imgur.com/m8OAhSx.jpeg) ![screenshot](https://i.imgur.com/prSzWgc.jpeg) ![screenshot](https://i.imgur.com/1RSlR55.jpeg) - [SPYAIR - 사무라이하트(Some Like It Hot!!) | Cover by 제갈금자x모구구](https://youtu.be/xuDAw0M-xQ0?si=RwuWIPd4gR47xM7Q) ### Neo-Porte(ネオポルテ)- 夜絆ニウ / yozuna niu (https://www.youtube.com/@niu_yozuna) ![screenshot](https://i.imgur.com/MKQQBHs.jpg) ![screenshot](https://i.imgur.com/lO8wU94.jpg) ![screenshot](https://i.imgur.com/zq0XXe7.jpg) ![screenshot](https://i.imgur.com/5nuatCB.jpg) ![screenshot](https://i.imgur.com/wXG7rQt.jpg) ![screenshot](https://i.imgur.com/2peors3.jpg) ![screenshot](https://i.imgur.com/o9RNSlt.jpg) - [【 #夜絆ニウ3D 】しっぽが見れるぞ!3Dお披露目IKZ!【夜絆ニウ / NeoPorte (ネオポルテ) 】](https://www.youtube.com/live/lZ3Rlvh6e1Q?t=832s) ### ISEGYE IDOL (이세계아이돌) - 주르르 JURURU (https://www.youtube.com/@JU_RURU) ![screenshot](https://i.imgur.com/Qukmpkh.jpg) ![screenshot](https://i.imgur.com/evk4e6N.jpg) ![screenshot](https://i.imgur.com/T14Vs0G.jpg) ![screenshot](https://i.imgur.com/o0RlbiU.jpg) ![screenshot](https://i.imgur.com/udZYkVo.jpg) ![screenshot](https://i.imgur.com/z9M8a3i.jpg) ![screenshot](https://i.imgur.com/TaFH5RU.jpg) ![screenshot](https://i.imgur.com/eEQAj8Z.jpg) ![screenshot](https://i.imgur.com/u4h1HwE.jpg) ![screenshot](https://i.imgur.com/JULVBCH.jpg) - [TWICE(트와이스) - "What is Love?"|Cover by 주르르](https://youtu.be/T-LRqnvEi9E?si=_9itufJ4CZrANSfL) ### Nachoneko (https://www.youtube.com/@Nachoneko_dayo) ![screenshot](https://i.imgur.com/h1Jcwpp.jpeg) ![screenshot](https://i.imgur.com/YptvVfq.jpeg) ![screenshot](https://i.imgur.com/OEKR03p.jpeg) ![screenshot](https://i.imgur.com/DWrzerr.jpeg) ![screenshot](https://i.imgur.com/NyskLIw.jpeg) ![screenshot](https://i.imgur.com/ufKk5nR.jpeg) ![screenshot](https://i.imgur.com/ZVNES4u.jpeg) ![screenshot](https://i.imgur.com/5nYIIiC.jpeg) ![screenshot](https://i.imgur.com/VDjD7Li.jpeg) ![screenshot](https://i.imgur.com/robLYDf.jpeg) - [【#Nachoneko3Dお披露目】ふふーん、とてもいいものだ✨🐈‍💙](https://youtu.be/t7jJL4PkvSg?si=Hk5lG60rJK35HG2U&t=106) - [こちらを見ている](https://youtu.be/mh_12WNvu1o?si=ufvy8_SRbXqcM5vi) ### すいみゃ / suimya (https://www.youtube.com/@suimya) ![screenshot](https://i.imgur.com/mz0z2P9.jpg) ![screenshot](https://i.imgur.com/Gsrt9DR.jpg) ![screenshot](https://i.imgur.com/sFGOiQW.jpg) ![screenshot](https://i.imgur.com/A9Y8qON.jpg) ![screenshot](https://i.imgur.com/SpUftHm.jpg) ![screenshot](https://i.imgur.com/mUHsn2U.jpg) ![screenshot](https://i.imgur.com/yN0SCYY.jpg) ![screenshot](https://i.imgur.com/YvvhOE8.jpg) ![screenshot](https://i.imgur.com/UrOn2qi.jpg) ![screenshot](https://i.imgur.com/K79aRqM.jpg) - [【3DMV】SOS /covered by すいみゃ【シャニマス】](https://youtu.be/kQBl0hmQZLk?si=OwoV_edmbq3hfzx0) ### StelLive - 아라하시 타비 ARAHASHI TABI (https://www.youtube.com/@arahashitabi) ![screenshot](https://i.imgur.com/QucI6Zn.jpg) ![screenshot](https://i.imgur.com/fsAqe1X.jpg) ![screenshot](https://i.imgur.com/WGZQyv9.jpg) ![screenshot](https://i.imgur.com/2D5ULfA.jpg) ![screenshot](https://i.imgur.com/OCFs9VP.jpg) ![screenshot](https://i.imgur.com/hIigeTi.jpg) ![screenshot](https://i.imgur.com/ZcgVXOc.jpg) ![screenshot](https://i.imgur.com/fN7KMQJ.jpg) ![screenshot](https://i.imgur.com/EhcvVJi.jpg) - [[4K] 스텔라이브 아라하시 타비! 3D 데뷔!](https://youtu.be/E_G9otMLf64?si=DrPfrCgRHJOlEQkr&t=3079) ### Stargazer Official @ 스타게이저 @ スターゲイザー (https://twitter.com/StargazerCoLtd) ![screenshot](https://i.imgur.com/n01LCwX.jpg) - [24ちゃん(イーサーちゃん)⚓🦷24Chan in 3D](https://twitter.com/StargazerCoLtd/status/1771108689916637350) ### VSPO!(ぶいすぽっ!) - 花芽すみれ (https://www.youtube.com/@KagaSumire) ![screenshot](https://i.imgur.com/zk7AsTW.jpg) ![screenshot](https://i.imgur.com/Asq0arH.jpg) ![screenshot](https://i.imgur.com/GeX49uo.jpg) ![screenshot](https://i.imgur.com/kLlSAgm.jpg) ![screenshot](https://i.imgur.com/kCPEPt0.jpg) ![screenshot](https://i.imgur.com/bSb3PY6.jpg) ![screenshot](https://i.imgur.com/pLPpfKY.jpg) ![screenshot](https://i.imgur.com/LV0zGNF.jpg) ![screenshot](https://i.imgur.com/h9PCXAh.jpg) - #花芽すみれ3D うおおおおお!!【 ぶいすぽ / 花芽すみれ 】 -> https://www.youtube.com/live/g-bN6gisi3g?si=_5opnk-tvTbVU3x5&t=1321 ### VirtuaReal Star - hanser (https://space.bilibili.com/11073) ![screenshot](https://i.imgur.com/nfVckVo.jpg) ![screenshot](https://i.imgur.com/Ij7zvhz.jpg) ![screenshot](https://i.imgur.com/ooybJus.jpg) ![screenshot](https://i.imgur.com/LtziYj5.jpg) - 感谢300关注 跳个舞 -> https://www.bilibili.com/video/BV1CR4y1j7bY/ ### Gawr Gura Ch. hololive-EN (https://www.youtube.com/@GawrGura): ![screenshot](https://i.imgur.com/cp5VTI1.jpg) ![screenshot](https://i.imgur.com/9CloXLw.jpg) ![screenshot](https://i.imgur.com/eVTmJT7.jpg) ![screenshot](https://i.imgur.com/bc46ZRF.jpg) ![screenshot](https://i.imgur.com/Ls2lt02.jpg) ![screenshot](https://i.imgur.com/wfzBTfb.jpg) ![screenshot](https://i.imgur.com/CLNxKnu.jpg) ![screenshot](https://i.imgur.com/DcfrNdL.jpg) ![screenshot](https://i.imgur.com/2ZggtS7.jpg) - 【3D BIRTHDAY】PARTY TIME! 🌊 #gawrgura -> https://youtu.be/lsFr7NzVVM8?t=2042 ### Neo-Porte(ネオポルテ)- [緋月ゆい / Hizuki Yui](https://www.youtube.com/@Hizuki_Yui_) ![screenshot](https://i.imgur.com/wJJ2VWV.jpg) ![screenshot](https://i.imgur.com/kp7z2il.jpg) ![screenshot](https://i.imgur.com/qODzhx3.jpg) ![screenshot](https://i.imgur.com/Cszcz0D.jpg) ![screenshot](https://i.imgur.com/fXfZ54k.jpg) ![screenshot](https://i.imgur.com/fz50ZMS.jpg) ![screenshot](https://i.imgur.com/JGjAIls.jpg) - [【#緋月ゆい3D】遂に"3D"になる…!?✨️【緋月ゆい/ネオポルテ】](https://www.youtube.com/live/jLvXmNRJFbI?si=Z3EcG1zwFJoSTxzr&t=1768) ### VSPO!(ぶいすぽっ!【公式】) (https://www.youtube.com/@Vspo77) ![screenshot](https://i.imgur.com/4LV7Sv3.jpg) ![screenshot](https://i.imgur.com/NfBeCOG.jpg) ![screenshot](https://i.imgur.com/PBRMIDn.jpg) ![screenshot](https://i.imgur.com/cWntQRN.jpg) ![screenshot](https://i.imgur.com/RUUPu2E.jpg) ![screenshot](https://i.imgur.com/BqvLFq4.jpg) ![screenshot](https://i.imgur.com/8wJCcs3.jpg) ![screenshot](https://i.imgur.com/m1X2Odj.jpg) ![screenshot](https://i.imgur.com/y1BvqRe.jpg) ![screenshot](https://i.imgur.com/CET2UlW.jpg) ![screenshot](https://i.imgur.com/IAEDyfl.jpg) - [【3D企画】ぶいすぽ公式音楽番組「ぶいすPOP!」【#ぶいすぽ3D】](https://www.youtube.com/live/9GaGcoDiULw?si=MTzHPHCocQWuNiEu&t=559) ### Takanashi Kiara Ch. hololive-EN (https://www.youtube.com/@TakanashiKiara) ![screenshot](https://i.imgur.com/QT0acUh.jpg) ![screenshot](https://i.imgur.com/TW8QBwh.jpg) ![screenshot](https://i.imgur.com/eA1YPzW.jpg) ![screenshot](https://i.imgur.com/pS7qRwM.jpg) ![screenshot](https://i.imgur.com/8hh4MU0.jpg) ![screenshot](https://i.imgur.com/AzE873T.jpg) ![screenshot](https://i.imgur.com/burEUOf.jpg) - DO U - Takanashi Kiara (Official Music Video) -> https://youtu.be/QI96hnhcr2E ### 浠Mizuki Channel (https://www.youtube.com/@MizukiVsinger) ![screenshot](https://i.imgur.com/MLD53cv.jpg) ![screenshot](https://i.imgur.com/hPGrptq.jpg) ![screenshot](https://i.imgur.com/N1nzvz8.jpg) ![screenshot](https://i.imgur.com/Irlz7pv.jpg) ![screenshot](https://i.imgur.com/mvWl3a2.jpg) ![screenshot](https://i.imgur.com/eX5wcLm.jpg) ![screenshot](https://i.imgur.com/0UjUA7U.jpg) ![screenshot](https://i.imgur.com/0FALsOV.jpg) ![screenshot](https://i.imgur.com/IM414Xu.jpg) ![screenshot](https://i.imgur.com/QyXXtuF.jpg) ![screenshot](https://i.imgur.com/PIdv650.jpg) - [浠Mizuki 1st 3D Live『Bon Voyage!』](https://www.youtube.com/live/Z8vh7LdIfd8?si=4Rk2oSldZn_4HkGg&t=3475) ### IRyS Ch. hololive-EN (https://www.youtube.com/@IRyS) ![screenshot](https://i.imgur.com/uzXUBzM.jpg) ![screenshot](https://i.imgur.com/AVkvVNr.jpg) ![screenshot](https://i.imgur.com/9IuhUxd.jpg) ![screenshot](https://i.imgur.com/WXdlda5.jpg) ![screenshot](https://i.imgur.com/ogHarSC.jpg) ![screenshot](https://i.imgur.com/9EZ5npm.jpg) ![screenshot](https://i.imgur.com/oq98GQb.jpg) ![screenshot](https://i.imgur.com/vtgqxfn.jpg) - [IRyS - Carbonated Love【Original Song 3D MV】](https://youtu.be/DjNNpw2x2dU?si=l8likvl1mhKgysJQ) - [IRyS - Carbonated Love【Original Song MV Teaser】](https://youtu.be/AtJO819M7XU?si=8P67HeUf04lJo6n8) ### VSPO!(ぶいすぽっ!【公式】) (https://www.youtube.com/@Vspo77) ![screenshot](https://i.imgur.com/gbCCiSL.jpg) ![screenshot](https://i.imgur.com/OQk9nOn.jpg) ![screenshot](https://i.imgur.com/3HcUwDK.jpg) ![screenshot](https://i.imgur.com/V1FPVDM.jpg) ![screenshot](https://i.imgur.com/7JGTBzZ.jpg) ![screenshot](https://i.imgur.com/hEwWEhA.jpg) ![screenshot](https://i.imgur.com/iOmmMpW.jpg) ![screenshot](https://i.imgur.com/sm316MD.jpg) ![screenshot](https://i.imgur.com/DGiiKKK.jpg) ![screenshot](https://i.imgur.com/uM0JEzg.jpg) ![screenshot](https://i.imgur.com/y3yRORf.jpg) - 【3D企画】ぶいすぽ公式音楽番組「ぶいすPOP!」第2弾【#ぶいすぽ3D】-> https://www.youtube.com/live/97_o-WI4ihc?feature=share ### 阿梓从小就很可爱 (https://space.bilibili.com/7706705/) ![screenshot](https://i.imgur.com/v3VNAbm.jpg) ![screenshot](https://i.imgur.com/ywGqO4f.jpg) ![screenshot](https://i.imgur.com/8RYOo4a.jpg) ![screenshot](https://i.imgur.com/y13uJN0.jpg) ![screenshot](https://i.imgur.com/186xRLg.jpg) - 【【直播回放】【3d】三周年新衣发布~ 2023年8月9日19点场】 -> https://www.bilibili.com/video/BV1uX4y1j7BY ### WAKTAVERSE (https://www.youtube.com/@waktaverse) ![screenshot](https://i.imgur.com/AgWJEqV.jpg) ![screenshot](https://i.imgur.com/vIgo9rc.jpg) ![screenshot](https://i.imgur.com/Ez8aqpv.jpg) ![screenshot](https://i.imgur.com/hfqbqL3.jpg) ![screenshot](https://i.imgur.com/3wg0oFU.jpg) ![screenshot](https://i.imgur.com/iMxGJ1q.jpg) ![screenshot](https://i.imgur.com/6NCf9Yh.jpg) ![screenshot](https://i.imgur.com/8e9rczR.jpg) - [Kissing You(키싱유) 이세계아이돌 COVERㅣ[소녀시대 - Kissing You(키싱유)] (ISEGYE IDOL)](https://youtu.be/OrFyzG5yTC4?si=WAkRHXFEqmPUFa9d) ### VSPO!(ぶいすぽっ!) - 夜乃くろむ (https://www.youtube.com/@YanoKuromu) ![screenshot](https://i.imgur.com/XkqlbNI.jpg) - [〖#夜乃くろむ3D 〗これがOTONAの魅力ってやつだよ。の巻〖 ぶいすぽっ! / 夜乃くろむ 〗](https://www.youtube.com/live/QtZQ3qHd5qQ?si=Tm3tBY9zcdgBVYHB&t=1438) - [Greedy Greedy](https://www.youtube.com/live/QtZQ3qHd5qQ?si=Yh_gqFe7pBTnlhuX&t=120) ### hololive - Shion Ch. 紫咲シオン (https://www.youtube.com/@MurasakiShion) ![screenshot](https://i.imgur.com/qjVT4M7.jpg) ![screenshot](https://i.imgur.com/i050aGy.jpg) ![screenshot](https://i.imgur.com/pOOn3wn.jpg) ![screenshot](https://i.imgur.com/p33Rr9U.jpg) - 【holo*27 MV】紫咲シオン x ラプラス・ダークネス - リップシンク【ホロライブ x DECO*27】 -> https://youtu.be/NjtIAuZQN_E ### VSPO!(ぶいすぽっ!【公式】) (https://www.youtube.com/@Vspo77) ![screenshot](https://i.imgur.com/6EPwhK3.jpg) ![screenshot](https://i.imgur.com/9AZN4eJ.jpg) ![screenshot](https://i.imgur.com/Ggco1mq.jpg) ![screenshot](https://i.imgur.com/ZKBLdgX.jpg) ![screenshot](https://i.imgur.com/OF5Kbhw.jpg) ![screenshot](https://i.imgur.com/cQZ8jP5.jpg) - 【協力脱出】ぶいすぽデスゲーム【#ぶいすぽ3D】 -> https://www.youtube.com/live/nMTQyZ70TCQ?feature=share ### Kanauru (https://www.youtube.com/user/kanauru): ![screenshot](https://i.imgur.com/iVbJHQo.jpg) ![screenshot](https://i.imgur.com/x8WdatG.jpg) ![screenshot](https://i.imgur.com/OUXsMzI.jpg) - Hoshimachi Suisei - TRUE GIRL SHOW | Kanauru PV -> https://youtu.be/FhtabnK3kso ### VSPO!(ぶいすぽっ!) - 八雲べに (https://www.youtube.com/@yakumo_beni) ![screenshot](https://i.imgur.com/TpMR0Sa.jpg) ![screenshot](https://i.imgur.com/2zWQ7pf.jpg) ![screenshot](https://i.imgur.com/m74CdfV.jpg) ![screenshot](https://i.imgur.com/eNPQhVi.jpg) ![screenshot](https://i.imgur.com/ooIHqsB.jpg) - 【#八雲べに3D】ついにキタ!耐えろYouTube!【ぶいすぽ/八雲べに】 -> https://www.youtube.com/live/WZ2zvy_gxtM?feature=share ### Moona Hoshinova hololive-ID (https://www.youtube.com/@MoonaHoshinova): ![screenshot](https://i.imgur.com/CJGhfxo.jpg) ![screenshot](https://i.imgur.com/F5vRtLR.jpg) ![screenshot](https://i.imgur.com/vJjAac3.jpg) ![screenshot](https://i.imgur.com/LGWJVnc.jpg) ![screenshot](https://i.imgur.com/DuxCEVM.jpg) ![screenshot](https://i.imgur.com/5PtoW1R.jpg) ![screenshot](https://i.imgur.com/cCxz82L.jpg) ![screenshot](https://i.imgur.com/skcjPAy.jpg) - 【Original Song】Who’s Toxic ? It’s You! - Moona Hoshinova【3DMV】 -> https://youtu.be/PFoGNZ05CJw ### AIChannel中国绊爱 (https://space.bilibili.com/484322035) ![screenshot](https://i.imgur.com/xEyCBXZ.jpg) ![screenshot](https://i.imgur.com/cRAhEE4.jpg) ![screenshot](https://i.imgur.com/6FZiC00.jpg) ![screenshot](https://i.imgur.com/5gzCGpn.jpg) ![screenshot](https://i.imgur.com/hhSrW74.jpg) ![screenshot](https://i.imgur.com/Us8tEer.jpg) ![screenshot](https://i.imgur.com/uAYhE8V.jpg) - 小 看 我 了 吧✨【BDF2023聚光】 -> https://www.bilibili.com/video/BV1FL411Y7Zc ### 史黛菈 埃蕾諾亞 / Stella Eleanor Ch. (https://www.youtube.com/@NKStellaEleanor) ![screenshot](https://i.imgur.com/jm7YKxb.jpg) ![screenshot](https://i.imgur.com/Boo6tIe.jpg) ![screenshot](https://i.imgur.com/4KYX2eP.jpg) ![screenshot](https://i.imgur.com/suKw6aT.jpg) ![screenshot](https://i.imgur.com/uFeHTSK.jpg) ![screenshot](https://i.imgur.com/cjlqz0u.jpg) ![screenshot](https://i.imgur.com/Dy6adLl.jpg) ![screenshot](https://i.imgur.com/KfwFGio.jpg) - [ShinWork Stella NiloToon Test 史黛菈女武神](https://youtu.be/jLhFQcBt6jM?si=G5g78GPf6EBclwqs) ### 泠鸢yousa (https://space.bilibili.com/282994) ![screenshot](https://i.imgur.com/SVWHinD.jpg) ![screenshot](https://i.imgur.com/NKlm7QI.jpg) ![screenshot](https://i.imgur.com/fHIsbYi.jpg) ![screenshot](https://i.imgur.com/krowLnM.jpg) ![screenshot](https://i.imgur.com/IEHSsvf.jpg) ![screenshot](https://i.imgur.com/0dfC7BB.jpg) ![screenshot](https://i.imgur.com/2vTqHqb.jpg) ![screenshot](https://i.imgur.com/47TXt3q.jpg) ![screenshot](https://i.imgur.com/EslbmcQ.jpg) ![screenshot](https://i.imgur.com/QKidTrM.jpg) - [【高清回放】泠鸢个人演唱会【时光标记】十周年纪念-高清全程回放](https://www.bilibili.com/video/BV1D24y1B7FA) - [泠鳶yousa個人演唱會【時光標記】十週年紀念【全程回放】](https://youtu.be/SAsCIXxTNEM?si=pOfT_9LTJiz4iPTX) - [【泠鳶時光標記演唱會】與你有關【一鏡到底 4K 純享版】](https://youtu.be/VrXl65Fylt4?si=gnwTEL3ArxPYRahT) - [【泠鳶時光標記演唱會】超遠距連接【一鏡到底 4K 純享版】](https://youtu.be/eqm8kjLbz8w?si=VU8WIxyPgCUC-8Bb) - [【泠鳶時光標記演唱會】機械舞者+落日餘歌【一鏡到底 4K 純享版】](https://youtu.be/BtpfdA2fa0g?si=HvSPgkcuXqNXfqgF) - [【泠鳶時光標記演唱會】爺爺的故鄉【一鏡到底 4K 純享版】](https://youtu.be/YjwnUn4HaVk?si=rQE4ENtKr-1qotHV) ### 懶貓子 & 杏仁ミル ![screenshot](https://i.imgur.com/xEHHKrE.jpg) ![screenshot](https://i.imgur.com/OO7EeR1.jpg) - 【Cute Dance】一起跳了超可愛的體操!! #shorts #さくゆいたいそう -> https://youtube.com/shorts/c4bXwAXbv1o?feature=share ### Rumi ch. 懶貓子 (https://youtu.be/Zlef92wDMnA): ![screenshot](https://i.imgur.com/VXjRjME.jpg) ![screenshot](https://i.imgur.com/kJAV5MD.jpg) ![screenshot](https://i.imgur.com/VQAGeIY.jpg) ![screenshot](https://i.imgur.com/diy3FOZ.jpg) ![screenshot](https://i.imgur.com/PXA8toS.jpg) ![screenshot](https://i.imgur.com/NF0d6tN.jpg) ![screenshot](https://i.imgur.com/bWnkbcB.jpg) ![screenshot](https://i.imgur.com/SP2HkMA.jpg) ![screenshot](https://i.imgur.com/LQrF8MD.jpg) ![screenshot](https://i.imgur.com/zioRmpu.jpg) ![screenshot](https://i.imgur.com/JAdtEAO.jpg) ![screenshot](https://i.imgur.com/oCcqtIS.jpg) ![screenshot](https://i.imgur.com/iPa9wZ8.jpg) ![screenshot](https://i.imgur.com/JopBcUs.jpg) ![screenshot](https://i.imgur.com/zaUh3Ql.jpg) ![screenshot](https://i.imgur.com/tvnep6K.jpg) ![screenshot](https://i.imgur.com/BGVkmF2.jpg) - 【#Rumi3D】3D首次亮相✨生日LIVE🍰🎤|Rumi/懶貓子 -> https://youtu.be/Zlef92wDMnA - 【3Ddance ver.】笑顔はここにある【#Rumi3D】 -> https://youtu.be/ugTNvBA3-So - 【3D cover】未知未踏アルスハイル【#Rumi3D】 -> https://youtu.be/X1T4tqdlrZQ - 【3Ddance ver.】NON STOP SOUL!!!【#Rumi3D】 -> https://youtu.be/10TDfSzRnp8 - 【#Rumi3D】Jugemu Jugemu dance! -> https://youtube.com/shorts/dU-t123n7q8?feature=share - 【#原神】#提納里 #柯萊 登場!抽卡PK!!!ft.BOSS #19 -> https://youtu.be/R3qM8CwUED8 - 歌ってみた】トウキョウ・シャンディ・ランデヴ - MAISONdes feat. 花譜, ツミキ -> https://youtu.be/XK10jQIaA7s ### エルセ/ Else (https://x.com/Else_PJblue) ![screenshot](https://i.imgur.com/bQ7raIT.jpg) ![screenshot](https://i.imgur.com/WB5Bb3u.jpg) ![screenshot](https://i.imgur.com/OPwEsPw.jpg) ![screenshot](https://i.imgur.com/pmnMeeF.jpg) ![screenshot](https://i.imgur.com/jEgC5yw.jpg) ### Nijisanji & bilibili - VirtuaReal (https://www.nijisanji.jp/talents?filter=virtuareal): ![screenshot](https://i.imgur.com/IKpdkTI.jpg) ![screenshot](https://i.imgur.com/ixS8EQW.jpg) ![screenshot](https://i.imgur.com/6k1D6ag.jpg) ![screenshot](https://i.imgur.com/oAvEF7g.jpg) ![screenshot](https://i.imgur.com/HVL9Ysa.jpg) ![screenshot](https://i.imgur.com/aAy01vv.jpg) ![screenshot](https://i.imgur.com/RA86RGL.jpg) ![screenshot](https://i.imgur.com/NgdtQJ8.jpg) ![screenshot](https://i.imgur.com/Fkx2mnn.jpg) ![screenshot](https://i.imgur.com/wyZgbaq.jpg) ![screenshot](https://i.imgur.com/qdbruDW.jpg) ![screenshot](https://i.imgur.com/PHFtPXc.jpg) ![screenshot](https://i.imgur.com/7wTiBrh.jpg) ![screenshot](https://i.imgur.com/aUQHF1m.jpg) ![screenshot](https://i.imgur.com/N3nCelq.jpg) ![screenshot](https://i.imgur.com/d250aAg.jpg) ![screenshot](https://i.imgur.com/qF6N0qG.jpg) ![screenshot](https://i.imgur.com/Rrhv8zc.jpg) ![screenshot](https://i.imgur.com/WWbyhD7.jpg) ![screenshot](https://i.imgur.com/5L8rOAm.jpg) ![screenshot](https://i.imgur.com/VLOGmBY.jpg) ![screenshot](https://i.imgur.com/9sV2qkn.jpg) ![screenshot](https://i.imgur.com/biEL7ZZ.jpg) - VirtuaReal 夏日合唱(2022) -> https://www.bilibili.com/festival/VRSummerSuper ### ISEGYE IDOL (이세계아이돌) - 비챤 VIichan (https://www.youtube.com/@viichan116) ![screenshot](https://i.imgur.com/HUpf5p3.jpg) ![screenshot](https://i.imgur.com/TCciYcn.jpg) ![screenshot](https://i.imgur.com/feMsCFg.jpg) ![screenshot](https://i.imgur.com/a2xB9Ts.jpg) - Tot Musica - Cover by 비챤 | MV Teaser -> https://youtu.be/OrXUERKzILg ![screenshot](https://i.imgur.com/UFVxyAp.jpg) ![screenshot](https://i.imgur.com/6lS0bmP.jpg) ![screenshot](https://i.imgur.com/AYJmxGD.jpg) ![screenshot](https://i.imgur.com/v6UOoNf.jpg) ![screenshot](https://i.imgur.com/qQQo47d.jpg) ![screenshot](https://i.imgur.com/zURXH2G.jpg) - [MV] Tot Musica - Cover by 비챤 -> https://youtu.be/sP0E6y0gWxA ### 崩坏学园2-灵依娘desu (https://space.bilibili.com/133934): ![screenshot](https://i.imgur.com/u8igVrL.jpg) ![screenshot](https://i.imgur.com/cM07F1y.jpg) ![screenshot](https://i.imgur.com/a1z5kJL.jpg) ![screenshot](https://i.imgur.com/ABCUJ9R.jpg) ![screenshot](https://i.imgur.com/Z5AI8oh.jpg) ![screenshot](https://i.imgur.com/AdvMZa8.jpg) - 【崩坏学园2】「启晨之星」菲米莉丝印象曲 -> https://www.bilibili.com/video/BV1Z64y1b7BW?share_source=copy_web - 「始まりの星」 PV制作花絮 - 角色篇 -> https://www.bilibili.com/video/BV1kU4y1c7AG?share_source=copy_web ### 杏仁ミル (https://www.youtube.com/@AnninMiru): ![screenshot](https://i.imgur.com/tQ5y5Dd.jpg) ![screenshot](https://i.imgur.com/h16ZKW3.jpg) ![screenshot](https://i.imgur.com/pSFZ5uM.jpg) ![screenshot](https://i.imgur.com/bcAjy0e.jpg) ![screenshot](https://i.imgur.com/lIYfaRV.jpg) ![screenshot](https://i.imgur.com/HD7YE8U.jpg) ![screenshot](https://i.imgur.com/GS7MMU2.jpg) ![screenshot](https://i.imgur.com/W0SsYoz.jpg) ![screenshot](https://i.imgur.com/mzXHdU6.jpg) ![screenshot](https://i.imgur.com/nYw45Ax.jpg) ![screenshot](https://i.imgur.com/RfQCpVK.jpg) ![screenshot](https://i.imgur.com/kDh9aI1.jpg) ![screenshot](https://i.imgur.com/IswkuJg.jpg) ![screenshot](https://i.imgur.com/zqFjdNW.jpg) - 【3D Live】ニャタタリズム - 杏仁ミル【#杏仁ミル3D】-> https://youtu.be/vICHoj4d_jE - 【3D Live】アスミルキミヘ - 杏仁ミル【#杏仁ミル3D】-> https://youtu.be/ujcUdrf7YBg ### 穆小泠Official (https://space.bilibili.com/43272050) ![screenshot](https://i.imgur.com/QF7t3x2.jpg) ![screenshot](https://i.imgur.com/K2YAc33.jpg) ![screenshot](https://i.imgur.com/nfSngMl.jpg) ![screenshot](https://i.imgur.com/MwkNyDt.jpg) - 【【国风原创曲】弹指醉|精美歌舞MMD【穆小泠】】 -> https://www.bilibili.com/video/BV1WG4y1t7o1 ### 兔眠可可 (https://space.bilibili.com/1096034982) ![screenshot](https://i.imgur.com/PlJCN49.jpg) ![screenshot](https://i.imgur.com/la6Qg7n.jpg) ![screenshot](https://i.imgur.com/KEUiqAo.jpg) ![screenshot](https://i.imgur.com/hZ3279a.jpg) ![screenshot](https://i.imgur.com/KgLGgot.jpg) ![screenshot](https://i.imgur.com/Y1iv1xR.jpg) - [寄明月](https://youtu.be/h_JdbQl--5I?si=AcJ2i4xDq5pKgjk0) - [千里邀月](https://youtu.be/KmWYgRwjqmQ?si=-OWjK3OKHNGY35Bn) - [花月成双](https://youtu.be/ndI-s0qc_pw?si=OrYekuL41RNIwhjd) ### 징버거 JINGBURGER (https://www.youtube.com/@jingburger) ![screenshot](https://i.imgur.com/7CqskrR.jpg) ![screenshot](https://i.imgur.com/iJumrEs.jpg) ![screenshot](https://i.imgur.com/0Nw9t3t.jpg) ![screenshot](https://i.imgur.com/YdOUkzn.jpg) ![screenshot](https://i.imgur.com/ayhOHNQ.jpg) - [Can't slow me downㅣ징버거 COVER (feat. 곽춘식)](https://youtu.be/goBJJTlcC_M?si=8a7wW3hZaoXC-Zw2) ### Nemesis ch. 涅默 (https://www.youtube.com/@NemesisXDFP) ![screenshot](https://i.imgur.com/wcMHIBm.jpg) ![screenshot](https://i.imgur.com/4VFUoMP.jpg) ![screenshot](https://i.imgur.com/3q7yWQU.jpg) ![screenshot](https://i.imgur.com/UL3T6uR.jpg) ![screenshot](https://i.imgur.com/3plWxoL.jpg) ![screenshot](https://i.imgur.com/uLZH0kQ.jpg) ![screenshot](https://i.imgur.com/UGNt89o.jpg) ![screenshot](https://i.imgur.com/5Pnd4O1.jpg) ![screenshot](https://i.imgur.com/YbgE5Cl.jpg) - [【3D SHOWCASE】降落!因你而存在的太陽伴星,想帶給你們歡樂又有活力的演出! #Nemomo3D 春魚創意 x VIVE ORIGINALS x BEATDAY【涅默Nemesis】](https://www.youtube.com/live/JIZ3hYas5VY?si=Dqs5uEPWtz0zKDxN&t=2126) ### psplive - 白神遥Haruka (https://space.bilibili.com/477332594) ![screenshot](https://i.imgur.com/6hhvJei.jpg) ![screenshot](https://i.imgur.com/CDfhokR.jpg) ![screenshot](https://i.imgur.com/sCZ9WGe.jpg) ![screenshot](https://i.imgur.com/6Cg3e8B.jpg) ![screenshot](https://i.imgur.com/ph6yXau.jpg) - [【日清合味道× psplive】原创歌曲《若行星海》MV正式发布!](https://www.bilibili.com/video/BV1qj411B7ps/?share_source=copy_web&vd_source=833e89d3d9a150b0feba26e590fd09ce) ### Kanauru (https://www.youtube.com/user/kanauru): ![screenshot](https://i.imgur.com/7TRdfHh.jpg) - Takane Lui - Overd ( オーバード ) | Kanauru Dance -> https://youtu.be/9qHbGbK8YnU ![screenshot](https://i.imgur.com/cvEciNf.jpg) ![screenshot](https://i.imgur.com/kfZocG4.jpg) ![screenshot](https://i.imgur.com/nMlQRiU.jpg) ![screenshot](https://i.imgur.com/WAW4kph.jpg) ![screenshot](https://i.imgur.com/uwqMRaM.jpg) - Laplus - 濁雨 Cover | Kanauru Dance -> https://youtu.be/psrZ-l8ZWOE ![screenshot](https://i.imgur.com/lW1w46W.jpg) ![screenshot](https://i.imgur.com/OBRN3uk.jpg) ![screenshot](https://i.imgur.com/f5Rlbvn.jpg) - Nanashi Mumei - The Forgotten Song | Kanauru MV -> https://youtu.be/nHUqPZfaXyI ![screenshot](https://i.imgur.com/vH3X61I.jpg) ![screenshot](https://i.imgur.com/pXcQT0g.jpg) ![screenshot](https://i.imgur.com/b6Elupz.jpg) ![screenshot](https://i.imgur.com/6yR1Y0l.jpg) - Kureiji Ollie Boba Shop Rap MV | Avilon - Speed | Kanauru Original -> https://youtu.be/2CTSe6Q5-xI ![screenshot](https://i.imgur.com/1x3NXLg.jpg) ![screenshot](https://i.imgur.com/kfnccw6.jpg) ### VirtuaReal (https://space.bilibili.com/413748120) ![screenshot](https://i.imgur.com/mFYajQZ.jpg) ![screenshot](https://i.imgur.com/ouCYYuu.jpg) ![screenshot](https://i.imgur.com/4PIdzV0.jpg) ![screenshot](https://i.imgur.com/SZuYnrT.jpg) ![screenshot](https://i.imgur.com/P7vwKgc.jpg) ![screenshot](https://i.imgur.com/UDSkD38.jpg) ![screenshot](https://i.imgur.com/yBeVFyq.jpg) ![screenshot](https://i.imgur.com/OU85vvo.jpg) ![screenshot](https://i.imgur.com/VYdimOq.jpg) ![screenshot](https://i.imgur.com/DhjXBtS.jpg) ![screenshot](https://i.imgur.com/iVony9f.jpg) ![screenshot](https://i.imgur.com/0IMkaM1.jpg) ![screenshot](https://i.imgur.com/9bjvA9d.jpg) - 【【4K】summertime 夏日海边我们在一起】 -> https://www.bilibili.com/video/BV1XN4y1R7K9 - 【【4K】LOVE DIVE 没想到我们跳了吧】 -> https://www.bilibili.com/video/BV1Hz4y1K7K6 - 【【4K】泳装这么可爱真是抱歉/可愛くてごめん~】 -> https://www.bilibili.com/video/BV1xF411k7T7 - 【想去海边 3D泳装直播】 https://www.bilibili.com/video/BV1jN411q7Qy ### Warudo on Steam(supporting NiloToonURP) (https://store.steampowered.com/app/2079120/Warudo/) ![screenshot](https://i.imgur.com/CLq5tte.jpg) ![screenshot](https://i.imgur.com/weIU8Ua.jpg) ![screenshot](https://i.imgur.com/9Zzfmd5.jpg) ![screenshot](https://i.imgur.com/aM2foCp.jpg) ![screenshot](https://i.imgur.com/OZRHUaO.jpg) ![screenshot](https://i.imgur.com/XVT386s.jpg) ![screenshot](https://i.imgur.com/Rq3uqR8.jpg) ![screenshot](https://i.imgur.com/njJBhHV.jpg) - 【超高可玩性!全新3D虚拟主播软件【Warudo】】-> https://www.bilibili.com/video/BV198411D7Ui ### Kanauru (https://www.youtube.com/user/kanauru): ![screenshot](https://i.imgur.com/fo9h7YR.jpg) - Kanauru MV | CapSule - Mori Calliope x Hoshimachi Suisei ![screenshot](https://i.imgur.com/TzekRQa.jpg) ![screenshot](https://i.imgur.com/J5wRsE0.jpg) - Ninomae Ina'nis - VIOLET | Kanauru MV -> https://youtu.be/vpS0Or-PHqs ![screenshot](https://i.imgur.com/SSMqmlR.jpg) - Suisei humming and playing Tetris at the train station -> https://youtu.be/qZn2qtov6Bo ### 米亞 Mya (https://www.youtube.com/@mya./featured) ![screenshot](https://i.imgur.com/QzISOsI.jpg) ![screenshot](https://i.imgur.com/MQ07xce.jpg) ![screenshot](https://i.imgur.com/W4UI45S.jpg) ![screenshot](https://i.imgur.com/E3WiIi8.jpg) ![screenshot](https://i.imgur.com/0bZFhwU.jpg) - 【#米亞兩週年】🎉兩週年🌸新房間攝影大會!補讀SC & 雜談 -> https://youtu.be/eC1djsRKSjY - 【#米亞兩週年】🎉跟大家一起慶祝 🎈 回饋粉絲向、紀念活動發表!-> https://youtu.be/1acQeY5hsgg?t=3480 - 🔴讀觀眾投稿的爛GAG…笑場即懲罰?!🎃 -> https://youtu.be/-p4KDJC9Xeg - 🔴週年活動來入坑!玩玩彈射世界🐼<有好多免費抽抽喔...我能抽到好東西嗎✨! -> https://youtu.be/z3pQR7wgCdc ### VSPO!(ぶいすぽっ!) - 英リサ.Hanabusa Lisa (https://www.youtube.com/@lisahanabusa) ![screenshot](https://i.imgur.com/gQHAQhs.jpg) ![screenshot](https://i.imgur.com/budQFko.jpg) ![screenshot](https://i.imgur.com/ghUkysz.jpg) ![screenshot](https://i.imgur.com/nT0EUVI.jpg) - 【#英リサ3Dお披露目】3次元、お邪魔します【ぶいすぽっ!/英リサ】 -> https://www.youtube.com/live/ey9KCNzSALQ?feature=share ### myer gugu(崩坏的栗子_108番) (https://www.artstation.com/myergugu) ![screenshot](https://i.imgur.com/VZPTL1E.jpg) ![screenshot](https://i.imgur.com/1VNCjuo.jpg) ![screenshot](https://i.imgur.com/cTFqrJx.jpg) ![screenshot](https://i.imgur.com/q8Yxfpu.jpg) ![screenshot](https://i.imgur.com/35iWFiR.jpg) ![screenshot](https://i.imgur.com/diLy0kf.jpg) ![screenshot](https://i.imgur.com/7HRTU3X.jpg) ![screenshot](https://i.imgur.com/1gVV5ca.jpg) ![screenshot](https://i.imgur.com/Hu26qqI.jpg) ![screenshot](https://i.imgur.com/yhCtWsh.jpg) ![screenshot](https://i.imgur.com/9ClFTst.jpg) ![screenshot](https://i.imgur.com/8PNIXUo.jpg) ### 泠鸢yousa (https://space.bilibili.com/282994) ![screenshot](https://i.imgur.com/fsAc12K.jpg) ![screenshot](https://i.imgur.com/lnkV7Io.jpg) ![screenshot](https://i.imgur.com/IJZiIYD.jpg) ![screenshot](https://i.imgur.com/11C2mJK.jpg) ![screenshot](https://i.imgur.com/8n8ZKt4.jpg) ![screenshot](https://i.imgur.com/mfRS2d7.jpg) ![screenshot](https://i.imgur.com/VpySKDt.jpg) ### Nijisanji & bilibili - VirtuaReal (https://www.nijisanji.jp/talents?filter=virtuareal): ![screenshot](https://i.imgur.com/GPi2ahM.jpg) ![screenshot](https://i.imgur.com/k0etAYv.jpg) ![screenshot](https://i.imgur.com/oGXzquC.jpg) ![screenshot](https://i.imgur.com/vwwjgVI.jpg) - https://www.bilibili.com/video/BV1G3411q7un?share_source=copy_web - https://www.bilibili.com/video/BV1QL411b78T?share_source=copy_web ![screenshot](https://i.imgur.com/IygURSJ.jpg) ![screenshot](https://i.imgur.com/CLyb3Od.jpg) (after clicking the link below, it will require you to press enter on the link again in your browser) - https://www.bilibili.com/video/BV1Ba411d7dc?share_source=copy_web&vd_source=833e89d3d9a150b0feba26e590fd09ce - https://www.bilibili.com/video/BV18T411c7XM?share_source=copy_web&vd_source=833e89d3d9a150b0feba26e590fd09ce ![screenshot](https://i.imgur.com/JMhgyGz.jpg) (after clicking the link below, it will require you to press enter on the link again in your browser) - https://www.bilibili.com/video/BV14Y4y1j7LL?share_source=copy_web&vd_source=833e89d3d9a150b0feba26e590fd09ce ![screenshot](https://i.imgur.com/e65IfZH.jpg) ![screenshot](https://i.imgur.com/xIBhYck.jpg) ![screenshot](https://i.imgur.com/jbxWnli.jpg) ![screenshot](https://i.imgur.com/DypAxQR.jpg) ![screenshot](https://i.imgur.com/cERhwTq.jpg) - https://www.bilibili.com/video/BV1Sg411V7HU?share_source=copy_web - https://www.bilibili.com/video/BV1X64y1a7go?share_source=copy_web ![screenshot](https://i.imgur.com/kPShSKQ.jpg) ![screenshot](https://i.imgur.com/Ma8oU7M.jpg) ![screenshot](https://i.imgur.com/Pvtxr0h.jpg) - https://www.bilibili.com/video/BV12h411W7Sm?share_source=copy_web - https://www.bilibili.com/video/BV1764y1Y7MD?p=2&share_source=copy_web ![screenshot](https://i.imgur.com/stWRga3.jpg) ![screenshot](https://i.imgur.com/qEiRTR9.jpg) ![screenshot](https://i.imgur.com/mEB7MuT.jpg) - https://www.bilibili.com/video/BV12h411W7ff?share_source=copy_web ![screenshot](https://i.imgur.com/mBD4ued.jpg) - https://www.bilibili.com/video/BV1ha411q7dY?share_source=copy_web - https://www.bilibili.com/video/BV1SZ4y1677A?share_source=copy_web ### Kanauru (https://www.youtube.com/user/kanauru): ![screenshot](https://i.imgur.com/fyPlgr4.jpg) - Pastel Tea Time by Omaru Polka | Kanauru Dance -> https://youtu.be/fri5IKzKDf4 ![screenshot](https://i.imgur.com/wPxsf1G.jpg) - Mumei and Kronii walking in the rain -> https://youtube.com/shorts/X3kQZ85N-hE?feature=share ![screenshot](https://i.imgur.com/nbZ69KC.jpg) ![screenshot](https://i.imgur.com/BIjpGAp.jpg) ![screenshot](https://i.imgur.com/9KcIdQD.jpg) ![screenshot](https://i.imgur.com/vSvp02D.jpg) ![screenshot](https://i.imgur.com/d0JkDTk.jpg) ### VirtuaReal Star - hanser (https://space.bilibili.com/11073) ![screenshot](https://i.imgur.com/vPlJSKP.jpg) ![screenshot](https://i.imgur.com/aCJQOt7.jpg) - 是小天使2021年百大up主的获奖感言呀~ -> https://www.bilibili.com/video/BV1pF411v7gu ![screenshot](https://i.imgur.com/xJ78uRL.jpg) - (4K画质)hanser个人演唱会《海上油菜花》-> https://www.bilibili.com/video/BV1Bq4y1r7bn (part of the rendering is NiloToonURP) ### 泠鸢yousa (https://space.bilibili.com/282994) ![screenshot](https://i.imgur.com/ENqYsBN.jpg) ![screenshot](https://i.imgur.com/tUfB3hf.jpg) ![screenshot](https://i.imgur.com/DaNt9rE.jpg) ![screenshot](https://i.imgur.com/5Aq4670.jpg) ![screenshot](https://i.imgur.com/WAzMctg.jpg) ![screenshot](https://i.imgur.com/amtHwjT.jpg) ![screenshot](https://i.imgur.com/iGxEgFP.jpg) ![screenshot](https://i.imgur.com/eZ5xByR.jpg) ![screenshot](https://i.imgur.com/y9BQsXg.jpg) ![screenshot](https://i.imgur.com/BP00DAs.jpg) ![screenshot](https://i.imgur.com/ge6Jray.jpg) ![screenshot](https://i.imgur.com/XPhB5pp.jpg) - https://www.bilibili.com/video/BV1BF41177Wa?share_source=copy_web - https://www.bilibili.com/video/BV11Z4y1h7hA?share_source=copy_web - https://www.bilibili.com/video/BV16v4y1N7wy?share_source=copy_web - https://www.bilibili.com/video/BV1e44y137BL (you need to enter the link to the browser again in order to play it) - https://www.bilibili.com/video/BV1Ng411X7e8?share_source=copy_web (you need to enter the link to the browser again in order to play it) ### hololive-EN (https://hololive.hololivepro.com/en/talents?gp=english): ![screenshot](https://i.imgur.com/ahpwnk3.jpg) ![screenshot](https://i.imgur.com/vyutd2p.jpg) - [【Kiara x Amelia】Dreamin Chuchu / どりーみんチュチュ SONG COVER](https://youtu.be/vjBZzYN3aAs) # Other NiloToonURP's images (gallery) ![screenshot](https://i.imgur.com/NYgkGQp.jpg) shader ON ![screenshot](https://i.imgur.com/vXcIGQ0.jpg) shader OFF ![screenshot](https://i.imgur.com/tx643sR.jpg) ![screenshot](https://i.imgur.com/tduYcFM.jpg) shader ON ![screenshot](https://i.imgur.com/cM5RJFJ.jpg) normal debug ![screenshot](https://i.imgur.com/ynw0UBz.jpg) shader OFF ![screenshot](https://i.imgur.com/XPmC2nt.jpg) ![screenshot](https://i.imgur.com/kPiktkr.jpg) ![screenshot](https://i.imgur.com/ltT2yHs.jpg) ![screenshot](https://i.imgur.com/JWbp20K.jpg) ![screenshot](https://i.imgur.com/183MzTr.jpg) ![screenshot](https://i.imgur.com/6LUJMZV.jpg) ![screenshot](https://i.imgur.com/1F9GxjT.jpg) ![screenshot](https://i.imgur.com/wXNlCNq.jpg) ![screenshot](https://i.imgur.com/Pbs5LAf.jpg) ![screenshot](https://i.imgur.com/4J2AExL.jpg) ![screenshot](https://i.imgur.com/AieVmMb.jpg) ![screenshot](https://i.imgur.com/jHrb3Gb.jpg) ![screenshot](https://i.imgur.com/BcyWUKz.jpg) ![screenshot](https://i.imgur.com/Pj7sETw.jpg) ![screenshot](https://i.imgur.com/G9Eo2eb.jpg) ![screenshot](https://i.imgur.com/HUX3Em4.jpg) ![screenshot](https://i.imgur.com/vQQsD7j.jpg) ![screenshot](https://i.imgur.com/M3vVDZZ.jpg) ![screenshot](https://i.imgur.com/DfAGBNL.jpg) ![screenshot](https://i.imgur.com/gIbAOkS.jpg) ![screenshot](https://i.imgur.com/LdKhKsA.jpg) ![screenshot](https://i.imgur.com/LHrgEw8.jpg) ![screenshot](https://i.imgur.com/x1KZFou.jpg) ![screenshot](https://i.imgur.com/V2N59VY.jpg) ![screenshot](https://i.imgur.com/D4VeHH5.jpg) ![screenshot](https://i.imgur.com/qJBkQ0X.jpg) ![screenshot](https://i.imgur.com/oVO96ml.jpg) ![screenshot](https://i.imgur.com/v7E6fkU.jpg) ![screenshot](https://i.imgur.com/d2R1L10.jpg) ![screenshot](https://i.imgur.com/MinoelW.jpg) ![screenshot](https://i.imgur.com/c0zQJP5.jpg) ![screenshot](https://i.imgur.com/3RPeUSP.jpg) ![screenshot](https://i.imgur.com/PZP4P3f.jpg) ![screenshot](https://i.imgur.com/NRHrNfc.jpg) ![screenshot](https://i.imgur.com/cZHp2de.jpg) ![screenshot](https://i.imgur.com/cb9H6YP.jpg) ![screenshot](https://i.imgur.com/2avJKYG.jpg) ![screenshot](https://i.imgur.com/wf00agx.jpg) ![screenshot](https://i.imgur.com/eYoZpKo.jpg) ![screenshot](https://i.imgur.com/VjsNwS8.jpg) ![screenshot](https://i.imgur.com/jClzSlf.jpg) ![screenshot](https://i.imgur.com/AKM46Os.jpg) ![screenshot](https://i.imgur.com/K8qHw6E.jpg) ![screenshot](https://i.imgur.com/Xw5PBsw.jpg) ------------------- SHADER ON ![screenshot](https://i.imgur.com/QyrLHYb.jpg) ![screenshot](https://i.imgur.com/T00U1qO.jpg) BEFORE ![screenshot](https://i.imgur.com/qAbvxEZ.jpg) AFTER: ![screenshot](https://i.imgur.com/373jFLC.jpg) see it in motion-> https://youtu.be/D9ocVzGJfI8 --- 3D enviroment model TEST ![screenshot](https://i.imgur.com/Ob6xlwI.jpg) ![screenshot](https://i.imgur.com/1GgqIZx.jpg) see it in motion-> https://youtu.be/GcW0pNo-zus --- 湊 あくあ(みなと あくあ,Minato Aqua) model TEST ![screenshot](https://i.imgur.com/bV1fIu8.jpg) ![screenshot](https://i.imgur.com/vCcnuso.jpg) ![screenshot](https://i.imgur.com/phqlwZE.jpg) see it in motion-> https://youtu.be/7zICgzdxuGg --- see it in motion-> https://youtu.be/X3XoYMTleJ0 --- Auto Phong tessellation (shader off, no tessellation) ![screenshot](https://i.imgur.com/OLAKa24.jpg) (shader on, no tessellation) ![screenshot](https://i.imgur.com/Q2DyIG7.jpg) (shader on, enable tessellation! Phong tessellation can make your model smooth without changing your .fbx) ![screenshot](https://i.imgur.com/qlJ2bQQ.jpg) see it in motion-> https://youtu.be/D-MxyBa0nJE --- Kawaii model TEST (@ganbaru_sisters) ![screenshot](https://i.imgur.com/v9TRN5A.jpg) ![screenshot](https://i.imgur.com/FIeltjQ.jpg) SHADER ON ![screenshot](https://i.imgur.com/ztEdBPp.jpg) SHADER OFF ![screenshot](https://i.imgur.com/JiqrUkk.jpg) HD ![screenshot](https://i.imgur.com/oV6iTsP.jpg) shader ON ![screenshot](https://i.imgur.com/ZZ0vVjz.jpg) shader OFF ![screenshot](https://i.imgur.com/POagEfm.jpg) --- BEFORE ![screenshot](https://i.imgur.com/oxi44CQ.jpg) AFTER ![screenshot](https://i.imgur.com/FpbVbc0.jpg) see it in motion-> https://youtu.be/KpRkxPnHuK0 --- BEFORE ![screenshot](https://i.imgur.com/ChhR8Bj.jpg) AFTER ![screenshot](https://i.imgur.com/h8lkC3L.jpg) (more shadow from trees) ![screenshot](https://i.imgur.com/GV1QZh6.jpg) --- BEFORE ![screenshot](https://i.imgur.com/vgssMwd.jpg) AFTER: ![screenshot](https://i.imgur.com/MUBfY1H.jpg) see it in motion-> https://youtu.be/hUWacEQH6js --- BEFORE ![screenshot](https://i.imgur.com/x9mhDzt.jpg) AFTER: ![screenshot](https://i.imgur.com/Gf5RyTd.jpg) BEFORE ![screenshot](https://i.imgur.com/Y39qHYk.jpg) AFTER: ![screenshot](https://i.imgur.com/VwIN3sH.jpg) add 2D hair shadow & rim light ![screenshot](https://i.imgur.com/3UqLwYH.jpg) see it in motion-> https://youtu.be/S67GlGAnvWA --- --- BEFORE ![screenshot](https://i.imgur.com/qeljSpf.jpg) AFTER: ![screenshot](https://i.imgur.com/dzK985t.jpg) see it in motion-> https://youtu.be/M6FKoEiOAzU --- ------------------- BEFORE ![screenshot](https://i.imgur.com/A2PyqyJ.jpg) AFTER: Sunny + StreetLight ON ![screenshot](https://i.imgur.com/mFoMG6n.jpg) Sunny + StreetLight OFF ![screenshot](https://i.imgur.com/CwQwVWV.jpg) Night + StreetLight ON ![screenshot](https://i.imgur.com/K2sGcZH.jpg) Night + StreetLight OFF ![screenshot](https://i.imgur.com/CXCeJsK.jpg) see it in motion -> https://youtu.be/jDSnJmZrKPw --- BEFORE ![screenshot](https://i.imgur.com/xY7XacI.jpg) AFTER ![screenshot](https://i.imgur.com/NLSgYm9.jpg) --- BEFORE ![screenshot](https://i.imgur.com/t9UnHK0.jpg) AFTER ![screenshot](https://i.imgur.com/qlDP3KN.jpg) see it in motion -> https://youtu.be/ZfSZOHTBypc --- BEFORE ![screenshot](https://i.imgur.com/4aEs2eo.jpg) AFTER ![screenshot](https://i.imgur.com/Nsl24so.jpg) see it in motion -> https://youtu.be/EgxiWPk-vaE --- BEFORE ![screenshot](https://i.imgur.com/7hgVTZb.jpg) AFTER ![screenshot](https://i.imgur.com/3jzOYAs.jpg) see it in motion -> https://youtu.be/Ty4DXLFqqDo --- BEFORE ![screenshot](https://i.imgur.com/K08rm3X.jpg) AFTER ![screenshot](https://i.imgur.com/PknYemC.jpg) see it in motion -> https://youtu.be/cebGl_MaWnI --- ![screenshot](https://i.imgur.com/AaHctFN.jpg) ![screenshot](https://i.imgur.com/Ie6nYSH.jpg) see it in motion -> https://youtu.be/uVI_QOioER4 --- Fake Skin SSS & specular ![screenshot](https://i.imgur.com/aO6a3gU.jpg) ![screenshot](https://i.imgur.com/kVZ0vVg.jpg) BEFORE ![screenshot](https://i.imgur.com/PQoFKIM.jpg) AFTER ![screenshot](https://i.imgur.com/P7CIuSX.jpg) What is included in this simplified tutorial example toon-lit shader repository? ------------------- This repository only contains a very simple toon-lit URP tutorial shader example, to help people write their first custom toon-lit shader in URP. This example shader's default result(without editing material params) = the following picture ![screenshot](https://i.imgur.com/7vo6Duo.jpg) Because this example toon lit shader aims to help people learn shader writing in URP, it is an extremely simplified version. This repository only contains ~3% of the NiloToonURP(full version)'s code, which only contains the most basic & easily understandable sections, to make sure everyone can understand the shader code easily. It is actually a "How to write your first custom toon-lit shader in URP?" example, instead of a good-looking toon-lit shader (lots of toon-lit tricks are not included in this example shader, for tutorial reasons). Why create this "simplified version" toon lit shader? ------------------- Lots of my shader friends are looking for a toon-lit example shader in URP (not Shader Graph), I want them to switch to URP(instead of still staying in built-in RP), so I decided to provide a simple enough URP toon-lit shader example in URP. How to try this simplified toon-lit example shader in my URP project? ------------------- 1. Clone all .shader & .hlsl files into your URP project. 2. Put these files inside the same folder. 3. Change your character's material's shader to "SimpleURPToonLitExample(With Outline)" 4. make sure at least _BaseMap(albedo) is assigned 5. setup DONE, you can now test your character with light probe/directional light/point light/spot light 6. edit the material properties to see how the render result changes 7. Most important: open these shader files, and spend some time reading them, you will understand how to write custom lit shaders in URP very quickly 8. Most important: open "SimpleURPToonLitOutlineExample_LightingEquation.hlsl", edit it, and experiment with your own toon lighting equation ideas, which is the key part of toon lit shader! I see the shader is working now, but the outline is broken? ------------------- For this tutorial shader, you can let Unity calculate smoothed normal for you, which can produce a better outline, but doing this will make the lighting slightly incorrect. 1. click your character's .fbx 2. In the model tab 3. edit "Normals" to Calculate 4. edit "Smoothing Angle" to 180 ![screenshot](https://i.imgur.com/rqefuLr.jpg) before calculating smooth normal (print screen of the tutorial shader, not NiloToonURP) ![screenshot](https://i.imgur.com/wbjjNtF.jpg) after calculating smooth normal (print screen of the tutorial shader, not NiloToonURP) ![screenshot](https://i.imgur.com/fTscZV0.jpg) *NiloToonURP(full version) contains many editor/runtime C# scripts, some of them are for producing correct lighting and perfect outline together automatically. What is NOT included in this simplified tutorial shader? ------------------- For simplicity reasons, most of the features from the NiloToonURP(full version) are removed, or else for beginners, this simple tutorial example shader will be way too complex for reading & learning. Some of the removed features are: - face anime lighting (auto-fix face ugly lighting due to vertex normal without modifying .fbx, very important) - smooth outline normal auto baking (auto-fix ugly outlines without modifying .fbx and lighting normal, very important) - auto 2D hair shadow on the face (very important, it is very difficult to produce good-looking shadow results on the face using URP's shadow map) - constant width rim light (similar to the method of Blue Protocol / Genshin Impact) - tricks to render eye/eyebrow over hair (ZOffset, stencil, and renderer redraw helpers) - PBR specular lighting (GGX) - all kinds of MatCap features(additive/multiply/shadow/replace...) - "HSV,tint,texture tint,texture override" shadow & outline color control - almost all the extra texture input options like roughness, specular, normal map, detail map, parallax, occlusion, emission... - LOTS of sliders to control lighting style, shadow color, final color, outline, rim light... - per character "dither fade inout / rim light / color control / extra outline / dissolve / ..." control script - volume override control of global "rim light / shadow / color control..." - special bloom post-process volume that can control the param of character/non-character area separately. Usually to prevent character over-bloom, or make the character emitting bloom on allowed areas only - anime postprocessing volume - shadow control volume - perspective removal per character, to avoid character's 3D distorted by high FOV camera - shader stripping editor script, to keep runtime shader memory usage and build time lower - (lots of other features) * just too much for me to write all the removed features here, the NiloToonURP(full version) and this simple tutorial shader example are two totally different products already How to get a test character model? ------------------- The easiest way to get a character model is by downloading Unity-Chan in the Unity AssetStore. Also, here are some websites where you can download models(If the creator allows it) - https://3d.nicovideo.jp/ - https://hub.vroid.com/ if you downloaded a .pmx file, use MMD4Mecanim to convert it to .fbx & prefab directly inside unity http://stereoarts.jp/ if you downloaded a .vrm file, use UniVRM to convert it to prefab directly inside Unity https://github.com/vrm-c/UniVRM Editor version requirement ----------------------- - Unity 2022.3 --------------------------- Apply our shader to another model (2020-2 early version screenshots) https://youtu.be/uVI_QOioER4 ![screenshot](https://i.imgur.com/qsx3VYw.jpg) ![screenshot](https://i.imgur.com/NTek8q8.jpg) ![screenshot](https://i.imgur.com/ee9dakE.jpg) ![screenshot](https://i.imgur.com/Bs0AKcb.jpg) More old screenshots from the Full version shader: --- ![screenshot](https://i.imgur.com/j5RgZpO.jpg) https://youtu.be/IP293mAmBCk ![screenshot](https://i.imgur.com/Wi0qy8V.jpg) ![screenshot](https://i.imgur.com/xoxrIZW.jpg) ![screenshot](https://i.imgur.com/aj12x53.jpg) ![screenshot](https://i.imgur.com/mXOkXOJ.jpg) Credits ------------------------ model's creator in shader demo image/video: - https://i-fox.club/pcr/ - https://sketchfab.com/3d-models/band-of-sisters-2f1c0626d4cf4fd286c4cf5d109f7a32 - miHoYo - Honkai Impact 3 - Kuro Game - Punishing: Grey Raven - Azur Lane: Crosswave - Sour式鏡音リン - Unity-Chan - https://www.bilibili.com/blackboard/activity-mrfzrlha.html - 【オリジナル3Dモデル】Eve -イヴ- by ganbaru_sisters https://booth.pm/en/items/2557029 - https://www.mmd.hololive.tv/ - Japanese Street by Art Equilibrium https://assetstore.unity.com/packages/3d/environments/urban/japanese-street-170162 - miHoYo - Genshin Impact - 【セール中】【オリジナル3Dモデル】ドラゴニュート・シェンナ by rokota https://rokota.booth.pm/items/2661189 - Cygames - Uma Musume - Cygames/Arc System Works - Granblue Fantasy Versus - 魔使マオ by 百舌谷@mozuya_ - QuQu - https://sonovr.booth.pm/ - nero -ネロ- by KM3 Doll - https://booth.pm/en/items/3167314 - Kanauru's credit list - https://youtu.be/2CTSe6Q5-xI - YOYOGIMORI (【VRC / VRM 対応3Dモデル】imiut ver3.03) - https://yoyogi-mori.booth.pm/items/2040691 - YOYOGIMORI (【VRC / VRM 対応3Dモデル】白鳥 -Shiratori- ver3.03) - https://yoyogi-mori.booth.pm/items/2482022 - Blue Archive Shun - https://bluearchive.jp/ - アイドリープライド,IDOLY PRIDE - https://idolypride.jp/ - Little Witch Nobeta - https://store.steampowered.com/app/1049890/Little_Witch_Nobeta/ - オリジナル3Dモデル「桔梗」by ぽんでろ - https://booth.pm/en/items/3681787 - 千反田える 3Dモデル(3ds Max) by @itou_nko - https://twitter.com/itou_nko (https://itou-nko.fanbox.cc/) - HoYoverse - Zenless Zone Zero - zenless.hoyoverse.com - アイドリープライド,IDOLY PRIDE - https://idolypride.jp/ - Honkai: Star Rail - https://hsr.hoyoverse.com/ - Girls Frontline 2 Exilium ================================================ FILE: SimpleURPToonLitOutlineExample.shader ================================================ // For more information, visit -> https://github.com/ColinLeung-NiloCat/UnityURPToonLitShaderExample /* This shader is a simple and short example showing you how to write your first URP custom toon lit shader with "minimum" shader code. You can use this shader as a starting point, add/edit code to develop your own custom toon lit shader for URP14(Unity2022.3) or above. Usually, just by editing "SimpleURPToonLitOutlineExample_LightingEquation.hlsl" alone can control most of the visual result. This shader includes 5 passes: 0.UniversalForwardOnly pass (this pass will always render to the _CameraColorAttachment* & _CameraDepthAttachment*) 1.Outline pass (this pass will always render to the _CameraColorAttachment* & _CameraDepthAttachment*) 2.ShadowCaster pass (only for URP's shadow caster rendering, render to the _MainLightShadowmapTexture* and _AdditionalLightsShadowmapTexture*. This pass won't render at all if your character don't cast shadow) 3.DepthOnly pass (only for URP's _CameraDepthTexture's rendering. This pass won't render at all if your project don't render URP's offscreen depth prepass) 4.DepthNormalsOnly pass (only for URP's _CameraDepthTexture + _CameraNormalsTexture's rendering. This pass won't render at all if your project don't render URP's offscreen depth+normal prepass) - Because most of the time, you use this toon lit shader for unique dynamic characters, so all lightmap related code are removed for simplicity. - For batching, we only rely on SRP batching, which is the most practical batching method in URP for rendering lots of unique animated SkinnedMeshRenderer characters using the same shader Most of the properties will try to follow URP Lit shader's naming convention, so switching your URP lit material's shader to this toon lit shader will preserve most of the original properties if defined in this shader. For URP Lit shader's naming convention, see URP's Lit.shader. In this shader, sometimes we choose "conditional move (a?b:c)" or "static uniform branching (if(_Uniform))" over "shader_feature & multi_compile" for some of the toggleable features, because: - we want to avoid this shader's build time takes too long (2^n) - we want to avoid shader size and memory usage becomes too large easily (2^n), 2GB memory iOS mobile will crash easily if you use too much multi_compile - we want to avoid rendering spike/hiccup when a new shader variant was seen by the camera first time ("create GPU program" in profiler) - we want to avoid increasing ShaderVariantCollection's keyword combination complexity - we want to avoid breaking SRP batching because SRP batching is per shader variant batching, not per shader All modern GPU(include the latest high-end mobile devices) can handle "static uniform branching" with "almost" no performance cost (if register pressure is not the bottleneck). Usually, there exist 4 cases of branching, here we sorted them by cost, from lowest cost to highest cost, and you usually only need to worry about the "case 4" only! case 1 - compile time constant if(): // absolutely 0 performance cost for any platform, unity's shader compiler will treat the false side of if() as dead code and remove it completely // shader compiler is very good at dead code removal #define SHOULD_RUN_FANCY_CODE 0 if(SHOULD_RUN_FANCY_CODE) {...} case 2 - static uniform branching if(): // reasonable low performance cost (except OpenGLES2, OpenGLES2 doesn't have branching and will always run both paths and discard the false path) // since OpenGLES2 is not important anymore in 2024, we will use static uniform branching if() when suitable CBUFFER_START(UnityPerMaterial) float _ShouldRunFancyCode; // usually controlled by a [Toggle] in material inspector, or material.SetFloat(1 or 0) in C# CBUFFER_END if(_ShouldRunFancyCode) {...} case 3 - dynamic branching if() without divergence inside a wavefront/warp: bool shouldRunFancyCode = (some shader calculation); // all pixels inside a wavefront/warp(imagine it is a group of 8x8 pixels) all goes into the same path, then no divergence. if(shouldRunFancyCode) {...} case 4 - dynamic branching if() WITH divergence inside a wavefront/warp: // this is the only case that will make GPU really slow! You will want to avoid it as much as possible bool shouldRunFancyCode = (some shader calculation); // pixels inside a wavefront/warp(imagine it is a group of 8x8 pixels) goes into different paths, even it is 63 vs 1 within a 8x8 thread group, it is still divergence! if(shouldRunFancyCode) {...} If you want to understand the difference between case 1-4, Here are some extra resources about the cost of if() / branching / divergence in shader: - https://stackoverflow.com/questions/37827216/do-conditional-statements-slow-down-shaders - https://stackoverflow.com/questions/5340237/how-much-performance-do-conditionals-and-unused-samplers-textures-add-to-sm2-3-p/5362006#5362006 - https://twitter.com/bgolus/status/1235351597816795136 - https://twitter.com/bgolus/status/1235254923819802626?s=20 - https://www.shadertoy.com/view/wlsGDl?fbclid=IwAR1ByDhQBck8VO0AMPS5XpbtBPSzSN9Mh8clW4itRgDIpy5ROcXW1Iyf86g [TLDR] Just remember(even for mobile platform): - if() itself is not evil, you CAN use it if you know there is no divergence inside a wavefront/warp, still, it is not free on mobile. - "a ? b : c" is just a conditional move(movc / cmov) in assembly code, don't worry using it if you have calculated b and c already - Don't try to optimize if() or "a ? b : c" by replacing them by lerp(b,c,step())..., because "a ? b : c" is always faster if you have calculated b and c already - branching is not evil, still it is not free. Sometimes we can use branching to help GPU run faster if the skipped task is heavy! - but, divergence is evil! If you want to use if(condition){...}else{...}, make sure the "condition" is the same within as many groups of 8x8 pixels as possible [Note from the developer (1)] Using shader permutation(multi_compile/shader_feature) is still the fastest way to skip shader calculation, because once the code doesn't exist, it will enable many compiler optimizations. If you need the best GPU performance, and you can accept long build time and huge memory usage, you can use multi_compile/shader_feature more, especially for features with texture read. NiloToonURP's character shader will always prefer shader permutation if it can skip any texture read, because the GPU hardware has very strong ALU(pure calculation) power growth since 2015 (including mobile), but relatively weak growth in memory bandwidth(usually means buffer/texture read). (https://community.arm.com/developer/tools-software/graphics/b/blog/posts/moving-mobile-graphics#siggraph2015) And when GPU is waiting for receiving texture fetch, it won't become idle, GPU will still continue any available ALU work(latency hiding) until there is 100% nothing to calculate anymore, also bandwidth is the biggest source of heat generation (especially on mobile without active cooling = easier overheat/thermal throttling). So we should try our best to keep memory bandwidth usage low (since more ALU is ok, but more texture read is not ok), the easiest way is to remove texture read using shader permutation. But if the code is ALU only(pure calculation), and calculation is simple on both paths on the if & else side, NiloToonURP will prefer "a ? b : c". The rest will be static uniform branching (usually means heavy ALU only code inside an if()). [Note from the developer (2)] If you are working on a game project, not a generic tool like NiloToonURP, you will always want to pack 4data (occlusion/specular/smoothness/any mask.....) into 1 RGBA texture(for fragment shader), and pack 4data (outlineWidth/ZOffset/face area mask....) into another RGBA texture(for vertex shader), to reduce the number of texture read without changing visual result(if we ignore texture compression). But since NiloToonURP is a generic tool that is used by different person/team/company, we know it is VERY important for all users to be able to apply NiloToon shader to any model easily/fast/without effort, and we know that it is almost not practical if we force regular user to pack their texture into a special format just for NiloToon shader, so we decided we will keep every texture separated, even it is VERY slow compared to the packed texture method. That is a sad decision in terms of performance, but a good decision for ease of use. If user don't need the best performance, this decision is actually a plus to them since it is much more flexible when using this shader. [About multi_compile or shader_feature's _vertex and _fragment suffixes] In unity 2020.3, unity added _vertex, _fragment suffixes to multi_compile and shader_feature https://docs.unity3d.com/2020.3/Documentation/Manual/SL-MultipleProgramVariants.html (Using stage-specific keyword directives) The only disadvantage of NOT using _vertex and _fragment suffixes is only compilation time, not build size/memory usage: https://docs.unity3d.com/2020.3/Documentation/Manual/SL-MultipleProgramVariants.html (Stage-specific keyword directives) "Unity identifies and removes duplicates afterwards, so this redundant work does not affect build sizes or runtime performance; however, if you have a lot of stages and/or variants, the time wasted during shader compilation can be significant." --------------------------------------------------------------------------- More information about mobile GPU optimization can be found here, most of the best practice can apply both GPU(Mali & Adreno): https://developer.arm.com/solutions/graphics-and-gaming/arm-mali-gpu-training [Shader build time and memory] https://blog.unity.com/engine-platform/2021-lts-improvements-to-shader-build-times-and-memory-usage [Support SinglePassInstancing] https://docs.unity3d.com/2022.2/Documentation/Manual/SinglePassInstancing.html [Conditionals can affect #pragma directives] preprocessor conditionals can be used to influence, which #pragma directives are selected. https://forum.unity.com/threads/new-shader-preprocessor.790328/ https://docs.unity3d.com/Manual/shader-variant-stripping.html Example code: { #ifdef SHADER_API_DESKTOP #pragma multi_compile _ RED GREEN BLUE WHITE #else #pragma shader_feature RED GREEN BLUE WHITE #endif } { #if SHADER_API_DESKTOP #pragma geometry ForwardPassGeometry #endif } { #if SHADER_API_DESKTOP #pragma vertex DesktopVert #else #pragma vertex MobileVert #endif } { #if SHADER_API_DESKTOP #pragma multi_compile SHADOWS_LOW SHADOWS_HIGH #pragma multi_compile REFLECTIONS_LOW REFLECTIONS_HIGH #pragma multi_compile CAUSTICS_LOW CAUSTICS_HIGH #elif SHADER_API_MOBILE #pragma multi_compile QUALITY_LOW QUALITY_HIGH #pragma shader_feature CAUSTICS // Uses shader_feature, so Unity strips variants that use CAUSTICS if there are no Materials that use the keyword at build time. #endif } But this will not work (Keywords coming from pragmas (shader_feature, multi_compile and variations) will not affect other pragmas.): { #pragma shader_feature WIREFRAME_MODE_ON #ifdef WIREFRAME_MODE_ON #pragma geometry ForwardPassGeometry #endif } [Write .shader and .hlsl using an IDE] Rider is the best IDE for writing shader in Unity, there should be no other better tool than Rider. If you never used Rider to write hlsl before, we highly recommend trying it for a month for free. https://www.jetbrains.com/rider/ [hlsl code is inactive in Rider] You may encounter an issue that some hlsl code is inactive within the #if #endif section, so Rider's "auto complete" and "systax highlightd" is not active, to solve this problem, please switch the context using the "Unity Shader Context picker in the status bar" UI at the bottom right of Rider For details, see this Rider document about "Unity Shader Context picker in the status bar": https://github.com/JetBrains/resharper-unity/wiki/Switching-code-analysis-context-for-hlsl-cginc-files-in-Rider */ Shader "SimpleURPToonLitExample(With Outline)" { Properties { [Header(High Level Setting)] [ToggleUI]_IsFace("Is Face? (face/eye/mouth)", Float) = 0 [Header(Base Color)] [MainTexture]_BaseMap("Base Map", 2D) = "white" {} [HDR][MainColor]_BaseColor("Base Color", Color) = (1,1,1,1) [Header(Alpha Clipping)] [Toggle(_UseAlphaClipping)]_UseAlphaClipping("Enable?", Float) = 0 _Cutoff(" Cutoff", Range(0.0, 1.0)) = 0.5 [Header(Emission)] [Toggle]_UseEmission("Enable?", Float) = 0 [HDR] _EmissionColor(" Color", Color) = (0,0,0) _EmissionMulByBaseColor(" Mul Base Color", Range(0,1)) = 0 [NoScaleOffset]_EmissionMap(" Emission Map", 2D) = "white" {} _EmissionMapChannelMask(" ChannelMask", Vector) = (1,1,1,0) [Header(Occlusion)] [Toggle]_UseOcclusion("Enable?", Float) = 0 _OcclusionStrength(" Strength", Range(0.0, 1.0)) = 1.0 [NoScaleOffset]_OcclusionMap(" OcclusionMap", 2D) = "white" {} _OcclusionMapChannelMask(" ChannelMask", Vector) = (1,0,0,0) _OcclusionRemapStart(" RemapStart", Range(0,1)) = 0 _OcclusionRemapEnd(" RemapEnd", Range(0,1)) = 1 [Header(Indirect Light)] _IndirectLightMinColor("Min Color", Color) = (0.1,0.1,0.1,1) // can prevent completely black if light prob is not baked _IndirectLightMultiplier("Multiplier", Range(0,1)) = 1 [Header(Direct Light)] _DirectLightMultiplier("Brightness", Range(0,1)) = 1 _CelShadeMidPoint("MidPoint", Range(-1,1)) = -0.5 _CelShadeSoftness("Softness", Range(0,1)) = 0.05 _MainLightIgnoreCelShade("Remove Shadow", Range(0,1)) = 0 [Header(Additional Light)] _AdditionalLightIgnoreCelShade("Remove Shadow", Range(0,1)) = 0.9 [Header(Shadow Mapping)] _ReceiveShadowMappingAmount("Strength", Range(0,1)) = 0.65 _ShadowMapColor(" Shadow Color", Color) = (1,0.825,0.78) _ReceiveShadowMappingPosOffset(" Depth Bias", Float) = 0 [Header(Outline)] _OutlineWidth("Width", Range(0,4)) = 1 _OutlineColor("Color", Color) = (0.5,0.5,0.5,1) [Header(Outline ZOffset)] _OutlineZOffset("ZOffset (View Space)", Range(0,1)) = 0.0001 [NoScaleOffset]_OutlineZOffsetMaskTex(" Mask (black is apply ZOffset)", 2D) = "black" {} _OutlineZOffsetMaskRemapStart(" RemapStart", Range(0,1)) = 0 _OutlineZOffsetMaskRemapEnd(" RemapEnd", Range(0,1)) = 1 } SubShader { Tags { // SRP introduced a new "RenderPipeline" tag in Subshader. This allows you to create shaders // that can match multiple render pipelines. If a RenderPipeline tag is not set it will match // any render pipeline. In case you want your SubShader to only run in URP, set the tag to // "UniversalPipeline" // here "UniversalPipeline" tag is required, because we only want this shader to run in URP. // If Universal render pipeline is not set in the graphics settings, this SubShader will fail. // One can add a SubShader below or fallback to Standard built-in to make this // material works with both Universal Render Pipeline and Builtin-RP // the tag value is "UniversalPipeline", not "UniversalRenderPipeline", be careful! "RenderPipeline" = "UniversalPipeline" // explicit SubShader tag to avoid confusion "RenderType" = "Opaque" "IgnoreProjector" = "True" "UniversalMaterialType" = "ComplexLit" "Queue"="Geometry" } // You can use LOD to control if this SubShader should be used. // if this SubShader is not allowed to be use due to LOD, // Unity will consider the next SubShader LOD 100 // We can extract duplicated hlsl code from all passes into this HLSLINCLUDE section. Less duplicated code = Less error HLSLINCLUDE // all Passes will need this keyword #pragma shader_feature_local_fragment _UseAlphaClipping ENDHLSL // [#0 Pass - ForwardLit] // Forward only pass. // Acts also as an opaque forward fallback for deferred rendering. // Shades GI, all lights, shadow, emission and fog in a single pass. // Compared to Builtin pipeline forward renderer, URP forward renderer will // render a scene with multiple lights with less draw calls and less overdraw. Pass { Name "ForwardLit" Tags { // "LightMode" matches the "ShaderPassName" set in UniversalRenderPipeline.cs. // SRPDefaultUnlit and passes with no LightMode tag are also rendered by URP // "LightMode" tag must be "UniversalForward" in order to render lit objects in URP. "LightMode" = "UniversalForwardOnly" } // ------------------------------------- // Render State Commands // - explicit render state to avoid confusion // - you can expose these render state to material inspector if needed (see URP's Lit.shader) Blend One Zero ZWrite On Cull Off ZTest LEqual HLSLPROGRAM #pragma target 2.0 // ------------------------------------- // Shader Stages #pragma vertex VertexShaderWork #pragma fragment ShadeFinalColor // ------------------------------------- // Material Keywords // (all shader_feature that we needed were extracted to a shared SubShader level HLSL block already) // ------------------------------------- // Universal Pipeline keywords // You can always copy this section from URP's ComplexLit.shader // When doing custom shaders you most often want to copy and paste these #pragma multi_compile // These multi_compile variants are stripped from the build depending on: // 1) Settings in the URP Asset assigned in the GraphicsSettings at build time // e.g If you disabled AdditionalLights in all the URP assets then all _ADDITIONA_LIGHTS variants // will be stripped from build // 2) Invalid combinations are stripped. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile _ _FORWARD_PLUS #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" // ------------------------------------- // Unity defined keywords #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING #pragma multi_compile _ SHADOWS_SHADOWMASK #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ LIGHTMAP_ON #pragma multi_compile _ DYNAMICLIGHTMAP_ON #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE #pragma multi_compile_fog #pragma multi_compile_fragment _ DEBUG_DISPLAY //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing #pragma instancing_options renderinglayer #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" //-------------------------------------- // Defines // - because this pass is just a ForwardLitOnly pass, no need any special #define // (no special #define) // ------------------------------------- // Includes // - all shader logic written inside this .hlsl, remember to write all #define BEFORE writing #include #include "SimpleURPToonLitOutlineExample_Shared.hlsl" ENDHLSL } // [#1 Pass - Outline] // Same as the above "ForwardLit" pass, but: // - vertex position are pushed out a bit base on normal direction // - also color is tinted by outline color // - Cull Front instead of Cull Off because Cull Front is a must for any 2 pass outline method Pass { Name "Outline" Tags { // IMPORTANT: don't write this line for any custom pass(e.g. outline pass)! // else this outline pass(custom pass) will not be rendered by URP! //"LightMode" = "UniversalForwardOnly" // [Important CPU performance note] // If you need to add a custom pass to your shader (e.g. outline pass, planar shadow pass, Xray overlay pass when blocked....), // follow these steps: // (1) Add a new Pass{} to your shader // (2) Write "LightMode" = "YourCustomPassTag" inside new Pass's Tags{} // (3) Add a new custom RendererFeature(C#) to your renderer, // (4) write cmd.DrawRenderers() with ShaderPassName = "YourCustomPassTag" // (5) if done correctly, URP will render your new Pass{} for your shader, in a SRP-batching friendly way (usually in 1 big SRP batch) // For tutorial purpose, current everything is just shader files without any C#, so this Outline pass is actually NOT SRP-batching friendly. // If you are working on a project with lots of characters, make sure you use the above method to make Outline pass SRP-batching friendly! } // ------------------------------------- // Render State Commands // - Cull Front is a must for extra pass outline method Blend One Zero ZWrite On Cull Front ZTest LEqual HLSLPROGRAM #pragma target 2.0 // ------------------------------------- // Shader Stages #pragma vertex VertexShaderWork #pragma fragment ShadeFinalColor // ------------------------------------- // Material Keywords // (all shader_feature that we needed were extracted to a shared SubShader level HLSL block already) // ------------------------------------- // Universal Pipeline keywords #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile _ _FORWARD_PLUS #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" // ------------------------------------- // Unity defined keywords #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING #pragma multi_compile _ SHADOWS_SHADOWMASK #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ LIGHTMAP_ON #pragma multi_compile _ DYNAMICLIGHTMAP_ON #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE #pragma multi_compile_fog #pragma multi_compile_fragment _ DEBUG_DISPLAY //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing #pragma instancing_options renderinglayer #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" //-------------------------------------- // Defines // - because this is an Outline pass, define "ToonShaderIsOutline" to inject outline related code into both VertexShaderWork() and ShadeFinalColor() #define ToonShaderIsOutline // ------------------------------------- // Includes // - all shader logic written inside this .hlsl, remember to write all #define BEFORE writing #include #include "SimpleURPToonLitOutlineExample_Shared.hlsl" ENDHLSL } // ShadowCaster pass. Used for rendering URP's shadowmaps Pass { Name "ShadowCaster" Tags { "LightMode" = "ShadowCaster" } // ------------------------------------- // Render State Commands // - more explicit render state to avoid confusion ZWrite On // the only goal of this pass is to write depth! ZTest LEqual // early exit at Early-Z stage if possible ColorMask 0 // we don't care about color, we just want to write depth in shadow maps, ColorMask 0 will save some write bandwidth Cull Off HLSLPROGRAM #pragma target 2.0 // ------------------------------------- // Shader Stages #pragma vertex VertexShaderWork #pragma fragment AlphaClipAndLODTest // we only need to do Clip(), no need shading // ------------------------------------- // Material Keywords // - the only keywords we need in this pass = _UseAlphaClipping, which is already defined inside the SubShader level HLSLINCLUDE block // (so no need to write any extra shader_feature in this pass) //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" // ------------------------------------- // Unity defined keywords #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE // This is used during shadow map generation to differentiate between directional and punctual light shadows, as they use different formulas to apply Normal Bias #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW //-------------------------------------- // Defines // - because it is a ShadowCaster pass, define "ToonShaderApplyShadowBiasFix" to inject "remove shadow mapping artifact" code into VertexShaderWork() #define ToonShaderApplyShadowBiasFix // ------------------------------------- // Includes // - all shader logic written inside this .hlsl, remember to write all #define BEFORE writing #include #include "SimpleURPToonLitOutlineExample_Shared.hlsl" ENDHLSL } // (X) No "GBuffer" Pass // DepthOnly pass. Used for rendering URP's offscreen depth prepass (you can search DepthOnlyPass.cs in URP package) // For example, when depth texture is on, we need to perform this offscreen depth prepass for this toon shader. Pass { Name "DepthOnly" Tags { "LightMode" = "DepthOnly" } // ------------------------------------- // Render State Commands // - more explicit render state to avoid confusion ZWrite On // the only goal of this pass is to write depth! ZTest LEqual // early exit at Early-Z stage if possible ColorMask R // we don't care about RGB color, we just want to write depth, ColorMask R will save some write bandwidth Cull Off HLSLPROGRAM #pragma target 2.0 // ------------------------------------- // Shader Stages #pragma vertex VertexShaderWork #pragma fragment DepthOnlyFragment // we only need to do Clip(), no need color shading // ------------------------------------- // Material Keywords // - the only keywords we need in this pass = _UseAlphaClipping, which is already defined inside the SubShader level HLSLINCLUDE block // (so no need to write any extra shader_feature in this pass) // ------------------------------------- // Unity defined keywords #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" //-------------------------------------- // Defines // - because Outline area should write to depth also, define "ToonShaderIsOutline" to inject outline related code into VertexShaderWork() #define ToonShaderIsOutline // ------------------------------------- // Includes // - all shader logic written inside this .hlsl, remember to write all #define BEFORE writing #include #include "SimpleURPToonLitOutlineExample_Shared.hlsl" ENDHLSL } // This pass is used when drawing to a _CameraNormalsTexture texture with the forward renderer or the depthNormal prepass with the deferred renderer. // URP can generate a normal texture _CameraNormalsTexture + _CameraDepthTexture together when requested, // if requested by a renderer feature(e.g. request by URP's SSAO). Pass { Name "DepthNormalsOnly" Tags { "LightMode" = "DepthNormalsOnly" } // ------------------------------------- // Render State Commands // - more explicit render state to avoid confusion ZWrite On // the only goal of this pass is to write depth! ZTest LEqual // early exit at Early-Z stage if possible ColorMask RGBA // we want to draw normal as rgb color! Cull Off HLSLPROGRAM #pragma target 2.0 // ------------------------------------- // Shader Stages #pragma vertex VertexShaderWork #pragma fragment DepthNormalsFragment // we only need to do Clip() + normal as rgb color shading // ------------------------------------- // Material Keywords // - the only keywords we need in this pass = _UseAlphaClipping, which is already defined inside the SubShader level HLSLINCLUDE block // (so no need to write any extra shader_feature in this pass) // ------------------------------------- // Universal Pipeline keywords #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" // ------------------------------------- // Unity defined keywords #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" //-------------------------------------- // Defines // ------------------------------------- // Includes // - all shader logic written inside this .hlsl, remember to write all #define BEFORE writing #include #include "SimpleURPToonLitOutlineExample_Shared.hlsl" ENDHLSL } // (X) No "Meta" pass // (X) No "Universal2D" pass } FallBack "Hidden/Universal Render Pipeline/FallbackError" // Custom editor is possible! We recommend checking out LWGUI(https://github.com/JasonMa0012/LWGUI) //CustomEditor "LWGUI.LWGUI" } ================================================ FILE: SimpleURPToonLitOutlineExample_LightingEquation.hlsl ================================================ // For more information, visit -> https://github.com/ColinLeung-NiloCat/UnityURPToonLitShaderExample // This file is intented for you to edit and experiment with different lighting equation. // Add or edit whatever code you want here // #pragma once is a safe guard best practice in almost every .hlsl (need Unity2020 or up), // doing this can make sure your .hlsl's user can include this .hlsl anywhere anytime without producing any multi include conflict #pragma once half3 ShadeGI(ToonSurfaceData surfaceData, ToonLightingData lightingData) { // hide 3D feeling by ignoring all detail SH (leaving only the constant SH term) // we just want some average envi indirect color only half3 averageSH = SampleSH(0); // can prevent result becomes completely black if lightprobe was not baked averageSH = max(_IndirectLightMinColor,averageSH); // occlusion (maximum 50% darken for indirect to prevent result becomes completely black) half indirectOcclusion = lerp(1, surfaceData.occlusion, 0.5); return averageSH * indirectOcclusion; } // Most important part: lighting equation, edit it according to your needs, write whatever you want here, be creative! // This function will be used by all direct lights (directional/point/spot) half3 ShadeSingleLight(ToonSurfaceData surfaceData, ToonLightingData lightingData, Light light, bool isAdditionalLight) { half3 N = lightingData.normalWS; half3 L = light.direction; half NoL = dot(N,L); half lightAttenuation = 1; // light's distance & angle fade for point light & spot light (see GetAdditionalPerObjectLight(...) in Lighting.hlsl) // Lighting.hlsl -> https://github.com/Unity-Technologies/Graphics/blob/master/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl half distanceAttenuation = min(4,light.distanceAttenuation); //clamp to prevent light over bright if point/spot light too close to vertex // N dot L // simplest 1 line cel shade, you can always replace this line by your own method! half litOrShadowArea = smoothstep(_CelShadeMidPoint-_CelShadeSoftness,_CelShadeMidPoint+_CelShadeSoftness, NoL); // occlusion litOrShadowArea *= surfaceData.occlusion; // face ignore celshade since it is usually very ugly using NoL method litOrShadowArea = _IsFace? lerp(0.5,1,litOrShadowArea) : litOrShadowArea; // light's shadow map litOrShadowArea *= lerp(1,light.shadowAttenuation,_ReceiveShadowMappingAmount); half3 litOrShadowColor = lerp(_ShadowMapColor,1, litOrShadowArea); half3 lightAttenuationRGB = litOrShadowColor * distanceAttenuation; // saturate() light.color to prevent over bright // additional light reduce intensity since it is additive return saturate(light.color) * lightAttenuationRGB * (isAdditionalLight ? 0.25 : 1); } half3 ShadeEmission(ToonSurfaceData surfaceData, ToonLightingData lightingData) { half3 emissionResult = lerp(surfaceData.emission, surfaceData.emission * surfaceData.albedo, _EmissionMulByBaseColor); // optional mul albedo return emissionResult; } half3 CompositeAllLightResults(half3 indirectResult, half3 mainLightResult, half3 additionalLightSumResult, half3 emissionResult, ToonSurfaceData surfaceData, ToonLightingData lightingData) { // [remember you can write anything here, this is just a simple tutorial method] // here we prevent light over bright, // while still want to preserve light color's hue half3 rawLightSum = max(indirectResult, mainLightResult + additionalLightSumResult); // pick the highest between indirect and direct light return surfaceData.albedo * rawLightSum + emissionResult; } ================================================ FILE: SimpleURPToonLitOutlineExample_Shared.hlsl ================================================ // For more information, visit -> https://github.com/ColinLeung-NiloCat/UnityURPToonLitShaderExample // #pragma once is a safe guard best practice in almost every .hlsl (need Unity2020 or up), // doing this can make sure your .hlsl's user can include this .hlsl anywhere anytime without producing any multi include conflict #pragma once // We don't have "UnityCG.cginc" in SRP/URP's package anymore, so: // Including the following two hlsl files is enough for shading with Universal Pipeline. Everything is included in them. // Core.hlsl will include SRP shader library, all constant buffers not related to materials (perobject, percamera, perframe). // It also includes matrix/space conversion functions and fog. // Lighting.hlsl will include the light functions/data to abstract light constants. You should use GetMainLight and GetLight functions // that initialize Light struct. Lighting.hlsl also include GI, Light BDRF functions. It also includes Shadows. // Required by all Universal Render Pipeline shaders. // It will include Unity built-in shader variables (except the lighting variables) // (https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html // It will also include many utilitary functions. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" // Include this if you are doing a lit shader. This includes lighting shader variables, // lighting and shadow functions #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" // Material shader variables are not defined in SRP or URP shader library. // This means _BaseColor, _BaseMap, _BaseMap_ST, and all variables in the Properties section of a shader // must be defined by the shader itself. If you define all those properties in CBUFFER named // UnityPerMaterial, SRP can cache the material properties between frames and reduce significantly the cost // of each drawcall. // In this case, although URP's LitInput.hlsl contains the CBUFFER for the material // properties defined above. As one can see this is not part of the ShaderLibrary, it specific to the // URP Lit shader. // So we are not going to use LitInput.hlsl, we will implement everything by ourself. //#include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" // we will include some utility .hlsl files to help us #include "NiloOutlineUtil.hlsl" #include "NiloZOffset.hlsl" #include "NiloInvLerpRemap.hlsl" // note: // subfix OS means object spaces (e.g. positionOS = position object space) // subfix WS means world space (e.g. positionWS = position world space) // subfix VS means view space (e.g. positionVS = position view space) // subfix CS means clip space (e.g. positionCS = position clip space) // all pass will share this Attributes struct (define data needed from Unity app to our vertex shader) struct Attributes { float3 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float2 uv : TEXCOORD0; // to support GPU instancing and Single Pass Stereo rendering(VR), add the following section UNITY_VERTEX_INPUT_INSTANCE_ID // For non PSSL, equals to -> uint instanceID : SV_InstanceID; }; // all pass will share this Varyings struct (define data needed from our vertex shader to our fragment shader) struct Varyings { float2 uv : TEXCOORD0; float4 positionWSAndFogFactor : TEXCOORD1; // xyz: positionWS, w: vertex fog factor half3 normalWS : TEXCOORD2; float4 positionCS : SV_POSITION; // to support GPU instancing and Single Pass Stereo rendering(VR), add the following section UNITY_VERTEX_INPUT_INSTANCE_ID // For non PSSL, equals to -> uint instanceID : SV_InstanceID; UNITY_VERTEX_OUTPUT_STEREO // For non OpenGL and non PSSL, equals to -> uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; (when UNITY_STEREO_INSTANCING_ENABLED) }; /////////////////////////////////////////////////////////////////////////////////////// // CBUFFER and Uniforms // (you should put all uniforms of all passes inside this single UnityPerMaterial CBUFFER! else SRP batching is not possible!) /////////////////////////////////////////////////////////////////////////////////////// // all sampler2D don't need to put inside CBUFFER sampler2D _BaseMap; sampler2D _EmissionMap; sampler2D _OcclusionMap; sampler2D _OutlineZOffsetMaskTex; // put all your uniforms(usually things inside .shader file's properties{}) inside this CBUFFER, in order to make SRP batcher compatible // see -> https://blogs.unity3d.com/2019/02/28/srp-batcher-speed-up-your-rendering/ CBUFFER_START(UnityPerMaterial) // high level settings float _IsFace; // base color float4 _BaseMap_ST; half4 _BaseColor; // alpha half _Cutoff; // emission float _UseEmission; half3 _EmissionColor; half _EmissionMulByBaseColor; half3 _EmissionMapChannelMask; // occlusion float _UseOcclusion; half _OcclusionStrength; half4 _OcclusionMapChannelMask; half _OcclusionRemapStart; half _OcclusionRemapEnd; // lighting half3 _IndirectLightMinColor; half _CelShadeMidPoint; half _CelShadeSoftness; // shadow mapping half _ReceiveShadowMappingAmount; float _ReceiveShadowMappingPosOffset; half3 _ShadowMapColor; // outline float _OutlineWidth; half3 _OutlineColor; float _OutlineZOffset; float _OutlineZOffsetMaskRemapStart; float _OutlineZOffsetMaskRemapEnd; CBUFFER_END //a special uniform for applyShadowBiasFixToHClipPos() only, it is not a per material uniform, //so it is fine to write it outside our UnityPerMaterial CBUFFER float3 _LightDirection; struct ToonSurfaceData { half3 albedo; half alpha; half3 emission; half occlusion; }; struct ToonLightingData { half3 normalWS; float3 positionWS; half3 viewDirectionWS; float4 shadowCoord; }; /////////////////////////////////////////////////////////////////////////////////////// // vertex shared functions /////////////////////////////////////////////////////////////////////////////////////// float3 TransformPositionWSToOutlinePositionWS(float3 positionWS, float positionVS_Z, float3 normalWS) { //you can replace it to your own method! Here we will write a simple world space method for tutorial reason, it is not the best method! float outlineExpandAmount = _OutlineWidth * GetOutlineCameraFovAndDistanceFixMultiplier(positionVS_Z); #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) || defined(UNITY_STEREO_DOUBLE_WIDE_ENABLED) outlineExpandAmount *= 0.5; #endif return positionWS + normalWS * outlineExpandAmount; } // if "ToonShaderIsOutline" is not defined = do regular MVP transform // if "ToonShaderIsOutline" is defined = do regular MVP transform + push vertex out a bit according to normal direction Varyings VertexShaderWork(Attributes input) { Varyings output; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // after invalid/discard vertex, do this part asap. // to support GPU instancing and Single Pass Stereo rendering(VR), add the following section ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// UNITY_SETUP_INSTANCE_ID(input); // will turn into this in non OpenGL and non PSSL -> UnitySetupInstanceID(input.instanceID); UNITY_TRANSFER_INSTANCE_ID(input, output); // will turn into this in non OpenGL and non PSSL -> output.instanceID = input.instanceID; UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); // will turn into this in non OpenGL and non PSSL -> output.stereoTargetEyeIndexAsRTArrayIdx = unity_StereoEyeIndex; // VertexPositionInputs contains position in multiple spaces (world, view, homogeneous clip space, ndc) // Unity compiler will strip all unused references (say you don't use view space). // Therefore there is more flexibility at no additional cost with this struct. VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS); // Similar to VertexPositionInputs, VertexNormalInputs will contain normal, tangent and bitangent // in world space. If not used it will be stripped. VertexNormalInputs vertexNormalInput = GetVertexNormalInputs(input.normalOS, input.tangentOS); float3 positionWS = vertexInput.positionWS; #ifdef ToonShaderIsOutline positionWS = TransformPositionWSToOutlinePositionWS(vertexInput.positionWS, vertexInput.positionVS.z, vertexNormalInput.normalWS); #endif // Computes fog factor per-vertex. float fogFactor = ComputeFogFactor(vertexInput.positionCS.z); // TRANSFORM_TEX is the same as the old shader library. output.uv = TRANSFORM_TEX(input.uv,_BaseMap); // packing positionWS(xyz) & fog(w) into a vector4 output.positionWSAndFogFactor = float4(positionWS, fogFactor); output.normalWS = vertexNormalInput.normalWS; //normlaized already by GetVertexNormalInputs(...) output.positionCS = TransformWorldToHClip(positionWS); #ifdef ToonShaderIsOutline // [Read ZOffset mask texture] // we can't use tex2D() in vertex shader because ddx & ddy is unknown before rasterization, // so use tex2Dlod() with an explict mip level 0, put explict mip level 0 inside the 4th component of param uv) float outlineZOffsetMaskTexExplictMipLevel = 0; float outlineZOffsetMask = tex2Dlod(_OutlineZOffsetMaskTex, float4(input.uv,0,outlineZOffsetMaskTexExplictMipLevel)).r; //we assume it is a Black/White texture // [Remap ZOffset texture value] // flip texture read value so default black area = apply ZOffset, because usually outline mask texture are using this format(black = hide outline) outlineZOffsetMask = 1-outlineZOffsetMask; outlineZOffsetMask = invLerpClamp(_OutlineZOffsetMaskRemapStart,_OutlineZOffsetMaskRemapEnd,outlineZOffsetMask);// allow user to flip value or remap // [Apply ZOffset, Use remapped value as ZOffset mask] output.positionCS = NiloGetNewClipPosWithZOffset(output.positionCS, _OutlineZOffset * outlineZOffsetMask + 0.03 * _IsFace); #endif // ShadowCaster pass needs special process to positionCS, else shadow artifact will appear //-------------------------------------------------------------------------------------- #ifdef ToonShaderApplyShadowBiasFix // see GetShadowPositionHClip() in URP/Shaders/ShadowCasterPass.hlsl // https://github.com/Unity-Technologies/Graphics/blob/master/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl float4 positionCS = TransformWorldToHClip(ApplyShadowBias(positionWS, output.normalWS, _LightDirection)); #if UNITY_REVERSED_Z positionCS.z = min(positionCS.z, positionCS.w * UNITY_NEAR_CLIP_VALUE); #else positionCS.z = max(positionCS.z, positionCS.w * UNITY_NEAR_CLIP_VALUE); #endif output.positionCS = positionCS; #endif //-------------------------------------------------------------------------------------- return output; } /////////////////////////////////////////////////////////////////////////////////////// // fragment shared functions (Step1: prepare data structs for lighting calculation) /////////////////////////////////////////////////////////////////////////////////////// half4 GetFinalBaseColor(Varyings input) { return tex2D(_BaseMap, input.uv) * _BaseColor; } half3 GetFinalEmissionColor(Varyings input) { half3 result = 0; if(_UseEmission) { result = tex2D(_EmissionMap, input.uv).rgb * _EmissionMapChannelMask * _EmissionColor.rgb; } return result; } half GetFinalOcculsion(Varyings input) { half result = 1; if(_UseOcclusion) { half4 texValue = tex2D(_OcclusionMap, input.uv); half occlusionValue = dot(texValue, _OcclusionMapChannelMask); occlusionValue = lerp(1, occlusionValue, _OcclusionStrength); occlusionValue = invLerpClamp(_OcclusionRemapStart, _OcclusionRemapEnd, occlusionValue); result = occlusionValue; } return result; } void DoClipTestToTargetAlphaValue(half alpha) { #if _UseAlphaClipping clip(alpha - _Cutoff); #endif } ToonSurfaceData InitializeSurfaceData(Varyings input) { ToonSurfaceData output; // albedo & alpha float4 baseColorFinal = GetFinalBaseColor(input); output.albedo = baseColorFinal.rgb; output.alpha = baseColorFinal.a; DoClipTestToTargetAlphaValue(output.alpha);// early exit if possible // emission output.emission = GetFinalEmissionColor(input); // occlusion output.occlusion = GetFinalOcculsion(input); return output; } ToonLightingData InitializeLightingData(Varyings input) { ToonLightingData lightingData; lightingData.positionWS = input.positionWSAndFogFactor.xyz; lightingData.viewDirectionWS = SafeNormalize(GetCameraPositionWS() - lightingData.positionWS); lightingData.normalWS = normalize(input.normalWS); //interpolated normal is NOT unit vector, we need to normalize it return lightingData; } /////////////////////////////////////////////////////////////////////////////////////// // fragment shared functions (Step2: calculate lighting & final color) /////////////////////////////////////////////////////////////////////////////////////// // all lighting equation written inside this .hlsl, // just by editing this .hlsl can control most of the visual result. #include "SimpleURPToonLitOutlineExample_LightingEquation.hlsl" // this function contains no lighting logic, it just pass lighting results data around // the job done in this function is "do shadow mapping depth test positionWS offset" half3 ShadeAllLights(ToonSurfaceData surfaceData, ToonLightingData lightingData) { // Indirect lighting half3 indirectResult = ShadeGI(surfaceData, lightingData); ////////////////////////////////////////////////////////////////////////////////// // Light struct is provided by URP to abstract light shader variables. // It contains light's // - direction // - color // - distanceAttenuation // - shadowAttenuation // // URP take different shading approaches depending on light and platform. // You should never reference light shader variables in your shader, instead use the // -GetMainLight() // -GetLight() // funcitons to fill this Light struct. ////////////////////////////////////////////////////////////////////////////////// //============================================================================================== // Main light is the brightest directional light. // It is shaded outside the light loop and it has a specific set of variables and shading path // so we can be as fast as possible in the case when there's only a single directional light // You can pass optionally a shadowCoord. If so, shadowAttenuation will be computed. Light mainLight = GetMainLight(); float3 shadowTestPosWS = lightingData.positionWS + mainLight.direction * (_ReceiveShadowMappingPosOffset + _IsFace); #ifdef _MAIN_LIGHT_SHADOWS // compute the shadow coords in the fragment shader now due to this change // https://forum.unity.com/threads/shadow-cascades-weird-since-7-2-0.828453/#post-5516425 // _ReceiveShadowMappingPosOffset will control the offset the shadow comparsion position, // doing this is usually for hide ugly self shadow for shadow sensitive area like face float4 shadowCoord = TransformWorldToShadowCoord(shadowTestPosWS); mainLight.shadowAttenuation = MainLightRealtimeShadow(shadowCoord); #endif // Main light half3 mainLightResult = ShadeSingleLight(surfaceData, lightingData, mainLight, false); //============================================================================================== // All additional lights half3 additionalLightSumResult = 0; #ifdef _ADDITIONAL_LIGHTS // Returns the amount of lights affecting the object being renderer. // These lights are culled per-object in the forward renderer of URP. int additionalLightsCount = GetAdditionalLightsCount(); for (int i = 0; i < additionalLightsCount; ++i) { // Similar to GetMainLight(), but it takes a for-loop index. This figures out the // per-object light index and samples the light buffer accordingly to initialized the // Light struct. If ADDITIONAL_LIGHT_CALCULATE_SHADOWS is defined it will also compute shadows. int perObjectLightIndex = GetPerObjectLightIndex(i); Light light = GetAdditionalPerObjectLight(perObjectLightIndex, lightingData.positionWS); // use original positionWS for lighting light.shadowAttenuation = AdditionalLightRealtimeShadow(perObjectLightIndex, shadowTestPosWS); // use offseted positionWS for shadow test // Different function used to shade additional lights. additionalLightSumResult += ShadeSingleLight(surfaceData, lightingData, light, true); } #endif //============================================================================================== // emission half3 emissionResult = ShadeEmission(surfaceData, lightingData); return CompositeAllLightResults(indirectResult, mainLightResult, additionalLightSumResult, emissionResult, surfaceData, lightingData); } half3 ConvertSurfaceColorToOutlineColor(half3 originalSurfaceColor) { return originalSurfaceColor * _OutlineColor; } half3 ApplyFog(half3 color, Varyings input) { half fogFactor = input.positionWSAndFogFactor.w; // Mix the pixel color with fogColor. You can optionaly use MixFogColor to override the fogColor // with a custom one. color = MixFog(color, fogFactor); return color; } // only the .shader file will call this function by // #pragma fragment ShadeFinalColor half4 ShadeFinalColor(Varyings input) : SV_TARGET { // to support GPU instancing and Single Pass Stereo rendering(VR), add the following section //------------------------------------------------------------------------------------------------------------------------------ UNITY_SETUP_INSTANCE_ID(input); // in non OpenGL and non PSSL, MACRO will turn into -> UnitySetupInstanceID(input.instanceID); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); // in non OpenGL and non PSSL, MACRO will turn into -> unity_StereoEyeIndex = input.stereoTargetEyeIndexAsRTArrayIdx; //------------------------------------------------------------------------------------------------------------------------------ ////////////////////////////////////////////////////////////////////////////////////////// // first prepare all data for lighting function ////////////////////////////////////////////////////////////////////////////////////////// // fillin ToonSurfaceData struct: ToonSurfaceData surfaceData = InitializeSurfaceData(input); // fillin ToonLightingData struct: ToonLightingData lightingData = InitializeLightingData(input); // apply all lighting calculation half3 color = ShadeAllLights(surfaceData, lightingData); #ifdef ToonShaderIsOutline color = ConvertSurfaceColorToOutlineColor(color); #endif color = ApplyFog(color, input); return half4(color, surfaceData.alpha); } ////////////////////////////////////////////////////////////////////////////////////////// // fragment shared functions (for ShadowCaster, DepthOnly, DepthNormalsOnly pass to use only) ////////////////////////////////////////////////////////////////////////////////////////// // copy and edit of ShadowCasterPass.hlsl void AlphaClipAndLODTest(Varyings input) { DoClipTestToTargetAlphaValue(GetFinalBaseColor(input).a); #ifdef LOD_FADE_CROSSFADE LODFadeCrossFade(input.positionCS); #endif } // copy and edit of DepthOnlyPass.hlsl half DepthOnlyFragment(Varyings input) : SV_TARGET { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); AlphaClipAndLODTest(input); return input.positionCS.z; } // copy and edit of LitDepthNormalsPass.hlsl void DepthNormalsFragment( Varyings input , out half4 outNormalWS : SV_Target0 #ifdef _WRITE_RENDERING_LAYERS , out float4 outRenderingLayers : SV_Target1 #endif ) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); AlphaClipAndLODTest(input); #if defined(_GBUFFER_NORMALS_OCT) float3 normalWS = normalize(input.normalWS); float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] outNormalWS = half4(packedNormalWS, 0.0); #else float2 uv = input.uv; #if defined(_PARALLAXMAP) #if defined(REQUIRES_TANGENT_SPACE_VIEW_DIR_INTERPOLATOR) half3 viewDirTS = input.viewDirTS; #else half3 viewDirTS = GetViewDirectionTangentSpace(input.tangentWS, input.normalWS, input.viewDirWS); #endif ApplyPerPixelDisplacement(viewDirTS, uv); #endif #if defined(_NORMALMAP) || defined(_DETAIL) float sgn = input.tangentWS.w; // should be either +1 or -1 float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz); float3 normalTS = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale); #if defined(_DETAIL) half detailMask = SAMPLE_TEXTURE2D(_DetailMask, sampler_DetailMask, uv).a; float2 detailUv = uv * _DetailAlbedoMap_ST.xy + _DetailAlbedoMap_ST.zw; normalTS = ApplyDetailNormal(detailUv, normalTS, detailMask); #endif float3 normalWS = TransformTangentToWorld(normalTS, half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz)); #else float3 normalWS = input.normalWS; #endif outNormalWS = half4(NormalizeNormalPerPixel(normalWS), 0.0); #endif #ifdef _WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayer(); outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif }