PrimoToon高级渲染技术光照模型、法线映射与边缘检测详解【免费下载链接】PrimoToonShader for Unity (Built-in Rendering Pipeline) attempting to replicate the shading of Genshin Impact developed by miHoYo. This is for datamined assets, not custom-made ones nor the MMD variants.项目地址: https://gitcode.com/gh_mirrors/pr/PrimoToonPrimoToon是一款专为Unity内置渲染管线设计的着色器致力于精确复现米哈游《原神》游戏中的卡通渲染风格。这款高级着色器通过创新的光照模型、精细的法线映射技术和智能的边缘检测算法为游戏开发者和3D艺术家提供了实现高质量卡通渲染的完整解决方案。 PrimoToon渲染管线概述PrimoToon采用模块化设计将复杂的渲染流程分解为多个可配置的组件。核心渲染逻辑位于PrimoToon.shader文件中而具体的计算实现则分布在多个HLSL文件中光照计算PrimoToon-main.hlsl包含主要的光照模型阴影处理PrimoToon-shadows.hlsl处理阴影计算边缘检测PrimoToon-outlines.hlsl实现轮廓线渲染输入处理PrimoToon-inputs.hlsli定义着色器输入结构 创新的光照模型设计PrimoToon的光照系统是其核心优势之一它模拟了《原神》中特有的卡通光照效果1. 环境光照计算环境光照通过calculateEnvLighting函数实现考虑了场景中的全局光照和环境反射。在PrimoToon-main.hlsl中环境光照被集成到最终的颜色计算中vectorfixed, 4 environmentLighting calculateEnvLighting(i.vertexWS);2. 面部光照特殊处理对于角色面部PrimoToon实现了特殊的光照算法。在PrimoToon.shader中面部着色器可以通过_UseFaceMapNew属性启用并使用专门的面部阴影贴图[SmallTexture]_FaceMap (Face Shadow,2D) white{ } _FaceMapSoftness (Face Lighting Softness, Range(0.0, 1.0)) 0.0013. 阴影渐变控制PrimoToon使用阴影渐变纹理Shadow Ramp来实现平滑的阴影过渡。在PrimoToon.shader中相关参数可以精细调整[SmallTexture]_PackedShadowRampTex(Shadow Ramp,2D) white{ } _LightArea (Shadow Position, Range(0.0, 2.0)) 0.55 _ShadowRampWidth (Ramp Width, Range(0.2, 3.0)) 1.0 高级法线映射技术法线映射是PrimoToon实现表面细节的关键技术1. 法线贴图配置在PrimoToon.shader中法线映射系统提供了完整的配置选项[Toggle] _UseBumpMap(Normal Map, Float) 0.0 [SmallTexture]_BumpMap(Normal Map,2D) white{ } _BumpScale (Normal Map Scale, Range(0.0, 1.0)) 0.22. 切线空间处理PrimoToon支持自定义切线导入这对于保持《原神》模型的原生外观至关重要。项目提供了AverageNormals.cs脚本来重新生成切线数据。3. 法线可视化为了方便调试PrimoToon内置了法线可视化功能。在PrimoToon.shader中可以通过以下属性查看法线信息[Toggle] _ReturnNormalMap (Show Normal Map, Range(0.0, 1.0)) 0.0 [Toggle] _ReturnNormals (Show Normals, Range(0.0, 1.0)) 0.0 [Toggle] _ReturnRawNormals (Show Raw Normals, Range(0.0, 1.0)) 0.0️ 智能边缘检测系统PrimoToon的边缘检测系统是其最突出的特性之一提供了多种轮廓线渲染选项1. 轮廓线类型选择在PrimoToon.shader中用户可以选择不同的轮廓线生成方式[Enum(None, 0, Normal, 1, Tangent, 2)] _OutlineType (Outline Type, Float) 1.0 [Toggle] _FallbackOutlines (Enable Fallback Outlines, Range(0.0, 1.0)) 1.0 _OutlineWidth (Outline Width, Float) 0.03 _Scale (Outline Scale, Float) 0.012. 基于法线的轮廓线当选择Normal模式时轮廓线沿着顶点法线方向扩展。在PrimoToon-outlines.hlsl中相关计算如下case 1: calcOutline * v.normal; break;3. 基于切线的轮廓线对于某些特殊模型使用切线方向可能产生更好的效果case 2: calcOutline * v.tangent.xyz; break;4. 距离自适应轮廓线PrimoToon实现了智能的距离自适应算法确保轮廓线在不同距离下保持一致的视觉宽度。在PrimoToon-outlines.hlsl中float distOutline max(distance(_WorldSpaceCameraPos, o.vertexWS), 1); distOutline min(distOutline, 10); calcOutline calcOutline * distOutline;5. 多材质轮廓线颜色PrimoToon支持为不同材质分配不同的轮廓线颜色在PrimoToon-outlines.hlsl中实现if(materialID 2){ globalOutlineColor _OutlineColor2; } else if(materialID 3){ globalOutlineColor _OutlineColor3; } 材质系统与特效1. 材质ID系统PrimoToon使用Lightmap的Alpha通道来存储材质ID信息支持最多5种不同材质的区分。在PrimoToon-outlines.hlsl中fixed idMasks lightmapTex.w; half materialID 1; if(idMasks 0.2 idMasks 0.4 _UseMaterial4 ! 0){ materialID 4; }2. 武器特效系统对于武器模型PrimoToon提供了溶解和图案特效。相关纹理资源包括武器图案Eff_WeaponsTotem_Grain_00.png武器溶解Eff_WeaponsTotem_Dissolve_00.png扫描图案Eff_Gradient_Repeat_01.png3. 金属度映射金属度信息通过专门的金属贴图控制如Avatar_Tex_MetalMap.png实现真实的金属反射效果。️ 编辑器集成与配置PrimoToon集成了强大的编辑器工具位于Scripts/ThryEditor/目录中1. 材质编辑器ThryEditor提供了直观的材质属性界面支持实时预览和调整所有着色器参数。2. 贴图打包工具TexturePacker工具可以优化纹理资源减少内存占用并提高渲染性能。3. 本地化支持编辑器支持多语言界面配置文件位于thry_editor_locale.csv。 性能优化技巧1. 纹理压缩设置根据README中的建议所有纹理除了渐变纹理都应设置为Default类型、High Quality压缩并启用Mip Maps。2. 颜色空间配置为了准确复现《原神》的色彩必须将Unity项目的Color Space设置为Linear而非默认的Gamma。3. 切线数据优化使用提供的AverageNormals.cs脚本可以优化模型的切线数据提高渲染质量。 快速入门指南1. 安装步骤git clone https://gitcode.com/gh_mirrors/pr/PrimoToon2. 基础配置将PrimoToon.shader应用到材质配置主纹理和光照贴图根据需要启用法线贴图调整轮廓线设置3. 高级特性启用启用面部着色器设置variant_selector为Face配置武器特效设置variant_selector为Weapon调整环境光照强度修改_EnvironmentLightingStrength 最佳实践建议1. 模型准备确保模型具有正确的UV布局和切线数据这对于轮廓线渲染至关重要。2. 纹理优化使用适当的纹理分辨率和压缩设置平衡视觉效果和性能需求。3. 光照设置在Linear颜色空间下配置场景光照以获得最准确的颜色再现。4. 轮廓线调试使用内置的调试功能可视化法线和轮廓线快速定位渲染问题。 总结PrimoToon通过其先进的光照模型、精确的法线映射和智能的边缘检测系统为Unity开发者提供了实现高质量卡通渲染的强大工具。无论是复现《原神》的视觉风格还是创建独特的卡通渲染效果PrimoToon都是一个值得深入研究和使用的优秀着色器解决方案。通过合理配置各种参数和充分利用编辑器工具开发者可以快速创建出视觉上令人惊叹的卡通风格渲染效果同时保持优秀的运行时性能。【免费下载链接】PrimoToonShader for Unity (Built-in Rendering Pipeline) attempting to replicate the shading of Genshin Impact developed by miHoYo. This is for datamined assets, not custom-made ones nor the MMD variants.项目地址: https://gitcode.com/gh_mirrors/pr/PrimoToon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
PrimoToon高级渲染技术:光照模型、法线映射与边缘检测详解
PrimoToon高级渲染技术光照模型、法线映射与边缘检测详解【免费下载链接】PrimoToonShader for Unity (Built-in Rendering Pipeline) attempting to replicate the shading of Genshin Impact developed by miHoYo. This is for datamined assets, not custom-made ones nor the MMD variants.项目地址: https://gitcode.com/gh_mirrors/pr/PrimoToonPrimoToon是一款专为Unity内置渲染管线设计的着色器致力于精确复现米哈游《原神》游戏中的卡通渲染风格。这款高级着色器通过创新的光照模型、精细的法线映射技术和智能的边缘检测算法为游戏开发者和3D艺术家提供了实现高质量卡通渲染的完整解决方案。 PrimoToon渲染管线概述PrimoToon采用模块化设计将复杂的渲染流程分解为多个可配置的组件。核心渲染逻辑位于PrimoToon.shader文件中而具体的计算实现则分布在多个HLSL文件中光照计算PrimoToon-main.hlsl包含主要的光照模型阴影处理PrimoToon-shadows.hlsl处理阴影计算边缘检测PrimoToon-outlines.hlsl实现轮廓线渲染输入处理PrimoToon-inputs.hlsli定义着色器输入结构 创新的光照模型设计PrimoToon的光照系统是其核心优势之一它模拟了《原神》中特有的卡通光照效果1. 环境光照计算环境光照通过calculateEnvLighting函数实现考虑了场景中的全局光照和环境反射。在PrimoToon-main.hlsl中环境光照被集成到最终的颜色计算中vectorfixed, 4 environmentLighting calculateEnvLighting(i.vertexWS);2. 面部光照特殊处理对于角色面部PrimoToon实现了特殊的光照算法。在PrimoToon.shader中面部着色器可以通过_UseFaceMapNew属性启用并使用专门的面部阴影贴图[SmallTexture]_FaceMap (Face Shadow,2D) white{ } _FaceMapSoftness (Face Lighting Softness, Range(0.0, 1.0)) 0.0013. 阴影渐变控制PrimoToon使用阴影渐变纹理Shadow Ramp来实现平滑的阴影过渡。在PrimoToon.shader中相关参数可以精细调整[SmallTexture]_PackedShadowRampTex(Shadow Ramp,2D) white{ } _LightArea (Shadow Position, Range(0.0, 2.0)) 0.55 _ShadowRampWidth (Ramp Width, Range(0.2, 3.0)) 1.0 高级法线映射技术法线映射是PrimoToon实现表面细节的关键技术1. 法线贴图配置在PrimoToon.shader中法线映射系统提供了完整的配置选项[Toggle] _UseBumpMap(Normal Map, Float) 0.0 [SmallTexture]_BumpMap(Normal Map,2D) white{ } _BumpScale (Normal Map Scale, Range(0.0, 1.0)) 0.22. 切线空间处理PrimoToon支持自定义切线导入这对于保持《原神》模型的原生外观至关重要。项目提供了AverageNormals.cs脚本来重新生成切线数据。3. 法线可视化为了方便调试PrimoToon内置了法线可视化功能。在PrimoToon.shader中可以通过以下属性查看法线信息[Toggle] _ReturnNormalMap (Show Normal Map, Range(0.0, 1.0)) 0.0 [Toggle] _ReturnNormals (Show Normals, Range(0.0, 1.0)) 0.0 [Toggle] _ReturnRawNormals (Show Raw Normals, Range(0.0, 1.0)) 0.0️ 智能边缘检测系统PrimoToon的边缘检测系统是其最突出的特性之一提供了多种轮廓线渲染选项1. 轮廓线类型选择在PrimoToon.shader中用户可以选择不同的轮廓线生成方式[Enum(None, 0, Normal, 1, Tangent, 2)] _OutlineType (Outline Type, Float) 1.0 [Toggle] _FallbackOutlines (Enable Fallback Outlines, Range(0.0, 1.0)) 1.0 _OutlineWidth (Outline Width, Float) 0.03 _Scale (Outline Scale, Float) 0.012. 基于法线的轮廓线当选择Normal模式时轮廓线沿着顶点法线方向扩展。在PrimoToon-outlines.hlsl中相关计算如下case 1: calcOutline * v.normal; break;3. 基于切线的轮廓线对于某些特殊模型使用切线方向可能产生更好的效果case 2: calcOutline * v.tangent.xyz; break;4. 距离自适应轮廓线PrimoToon实现了智能的距离自适应算法确保轮廓线在不同距离下保持一致的视觉宽度。在PrimoToon-outlines.hlsl中float distOutline max(distance(_WorldSpaceCameraPos, o.vertexWS), 1); distOutline min(distOutline, 10); calcOutline calcOutline * distOutline;5. 多材质轮廓线颜色PrimoToon支持为不同材质分配不同的轮廓线颜色在PrimoToon-outlines.hlsl中实现if(materialID 2){ globalOutlineColor _OutlineColor2; } else if(materialID 3){ globalOutlineColor _OutlineColor3; } 材质系统与特效1. 材质ID系统PrimoToon使用Lightmap的Alpha通道来存储材质ID信息支持最多5种不同材质的区分。在PrimoToon-outlines.hlsl中fixed idMasks lightmapTex.w; half materialID 1; if(idMasks 0.2 idMasks 0.4 _UseMaterial4 ! 0){ materialID 4; }2. 武器特效系统对于武器模型PrimoToon提供了溶解和图案特效。相关纹理资源包括武器图案Eff_WeaponsTotem_Grain_00.png武器溶解Eff_WeaponsTotem_Dissolve_00.png扫描图案Eff_Gradient_Repeat_01.png3. 金属度映射金属度信息通过专门的金属贴图控制如Avatar_Tex_MetalMap.png实现真实的金属反射效果。️ 编辑器集成与配置PrimoToon集成了强大的编辑器工具位于Scripts/ThryEditor/目录中1. 材质编辑器ThryEditor提供了直观的材质属性界面支持实时预览和调整所有着色器参数。2. 贴图打包工具TexturePacker工具可以优化纹理资源减少内存占用并提高渲染性能。3. 本地化支持编辑器支持多语言界面配置文件位于thry_editor_locale.csv。 性能优化技巧1. 纹理压缩设置根据README中的建议所有纹理除了渐变纹理都应设置为Default类型、High Quality压缩并启用Mip Maps。2. 颜色空间配置为了准确复现《原神》的色彩必须将Unity项目的Color Space设置为Linear而非默认的Gamma。3. 切线数据优化使用提供的AverageNormals.cs脚本可以优化模型的切线数据提高渲染质量。 快速入门指南1. 安装步骤git clone https://gitcode.com/gh_mirrors/pr/PrimoToon2. 基础配置将PrimoToon.shader应用到材质配置主纹理和光照贴图根据需要启用法线贴图调整轮廓线设置3. 高级特性启用启用面部着色器设置variant_selector为Face配置武器特效设置variant_selector为Weapon调整环境光照强度修改_EnvironmentLightingStrength 最佳实践建议1. 模型准备确保模型具有正确的UV布局和切线数据这对于轮廓线渲染至关重要。2. 纹理优化使用适当的纹理分辨率和压缩设置平衡视觉效果和性能需求。3. 光照设置在Linear颜色空间下配置场景光照以获得最准确的颜色再现。4. 轮廓线调试使用内置的调试功能可视化法线和轮廓线快速定位渲染问题。 总结PrimoToon通过其先进的光照模型、精确的法线映射和智能的边缘检测系统为Unity开发者提供了实现高质量卡通渲染的强大工具。无论是复现《原神》的视觉风格还是创建独特的卡通渲染效果PrimoToon都是一个值得深入研究和使用的优秀着色器解决方案。通过合理配置各种参数和充分利用编辑器工具开发者可以快速创建出视觉上令人惊叹的卡通风格渲染效果同时保持优秀的运行时性能。【免费下载链接】PrimoToonShader for Unity (Built-in Rendering Pipeline) attempting to replicate the shading of Genshin Impact developed by miHoYo. This is for datamined assets, not custom-made ones nor the MMD variants.项目地址: https://gitcode.com/gh_mirrors/pr/PrimoToon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考