Unity自定义材质自发光烘焙设置工具
生活随笔
收集整理的這篇文章主要介紹了
Unity自定义材质自发光烘焙设置工具
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于Unity里自發光材質的烘焙,一個是要加上Meta Pass,一個是要設置材質的Lightmap Flags設置為BakedEmissive
以下為烘焙自發光成功與失敗的對比
第一點加上meta pass,以下為URP管線下通用Meta Pass,加載自定義的shader后面,把參數換成自己的參數名就好:
// This pass it not used during regular rendering, only for lightmap baking. Pass {Name "Meta"Tags{"LightMode" = "Meta"}Cull OffHLSLPROGRAM#pragma only_renderers gles gles3 glcore d3d11#pragma target 2.0#pragma vertex vert_Meta#pragma fragment frag_Meta#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl"TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);TEXTURE2D(_Emissionmap); SAMPLER(sampler_Emissionmap);struct a2v_Meta{float4 positionOS : POSITION;float3 normalOS : NORMAL;float2 uv0 : TEXCOORD0;float2 uv1 : TEXCOORD1;float2 uv2 : TEXCOORD2;#ifdef _TANGENT_TO_WORLDfloat4 tangentOS : TANGENT;#endif};struct v2f_Meta{float4 positionCS : SV_POSITION;float2 uv : TEXCOORD0;};v2f_Meta vert_Meta(a2v_Meta input){v2f_Meta output = (v2f_Meta)0;output.positionCS = MetaVertexPosition(input.positionOS, input.uv1, input.uv2, unity_LightmapST, unity_DynamicLightmapST);output.uv = TRANSFORM_TEX(input.uv0, _BaseMap);return output;}half4 frag_Meta(v2f_Meta input) : SV_Target{SurfaceData surfaceData;half4 albedoAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv);surfaceData.albedo = albedoAlpha.rgb * _BaseColor.rgb;surfaceData.alpha = albedoAlpha.a * _BaseColor.a;half4 metallicGlossOcclusion = SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, input.uv);surfaceData.metallic = _Metallic * metallicGlossOcclusion.r;surfaceData.smoothness = _Smoothness * metallicGlossOcclusion.a;surfaceData.specular = _SpecularColor.rgb;surfaceData.emission = SAMPLE_TEXTURE2D(_Emissionmap, sampler_Emissionmap, input.uv).rgb * _Emission.rgb;surfaceData.clearCoatMask = 0.0h;surfaceData.clearCoatSmoothness = 0.0h;BRDFData brdfData;InitializeBRDFData(surfaceData.albedo, surfaceData.metallic, surfaceData.specular, surfaceData.smoothness, surfaceData.alpha, brdfData);MetaInput metaInput;metaInput.Albedo = brdfData.diffuse + brdfData.specular * brdfData.roughness * 0.5;metaInput.SpecularColor = surfaceData.specular;metaInput.Emission = surfaceData.emission;return MetaFragment(metaInput);}ENDHLSL }第二點設置材質的Lightmap Flags,可以用代碼mat.globalIlluminationFlags = MaterialGlobalIlluminationFlags.BakedEmissive來設置,或者在Debug模式下,把材質的LightmapFlags改為4
做了個小工具,便于美術在材質面板上,點擊右上角的齒輪,就可以很輕松的設置哪些材質需要自發光烘焙
以下是代碼,放進工程里就好
總結
以上是生活随笔為你收集整理的Unity自定义材质自发光烘焙设置工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html怎样导入ps,【Photosho
- 下一篇: 开发一个程序基本思路