浏览代码
Merge pull request #799 from Unity-Technologies/Add-uv-mapping-selection-for-emissive
Merge pull request #799 from Unity-Technologies/Add-uv-mapping-selection-for-emissive
Add uv mapping selection for emissive/main
GitHub
7 年前
当前提交
6244dba8
共有 11 个文件被更改,包括 780 次插入 和 980 次删除
-
27ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/LayeredLit/LayeredLitUI.cs
-
39ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/Lit/LitUI.cs
-
4ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/LayeredLit/LayeredLit.shader
-
1001ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/LayeredLit/LayeredLitData.hlsl
-
4ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/LayeredLit/LayeredLitTessellation.shader
-
5ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/Lit.shader
-
60ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/LitData.hlsl
-
520ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/LitProperties.hlsl
-
5ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/LitTessellation.shader
-
86ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/LitBuiltinData.hlsl
-
9ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/LitBuiltinData.hlsl.meta
1001
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/LayeredLit/LayeredLitData.hlsl
文件差异内容过多而无法显示
查看文件
文件差异内容过多而无法显示
查看文件
|
|||
// =========================================================================== |
|||
// WARNING: |
|||
// On PS4, texture/sampler declarations need to be outside of CBuffers |
|||
// Otherwise those parameters are not bound correctly at runtime. |
|||
// =========================================================================== |
|||
|
|||
TEXTURE2D(_DistortionVectorMap); |
|||
SAMPLER(sampler_DistortionVectorMap); |
|||
|
|||
TEXTURE2D(_EmissiveColorMap); |
|||
SAMPLER(sampler_EmissiveColorMap); |
|||
|
|||
#ifndef LAYERED_LIT_SHADER |
|||
|
|||
TEXTURE2D(_DiffuseLightingMap); |
|||
SAMPLER(sampler_DiffuseLightingMap); |
|||
|
|||
TEXTURE2D(_BaseColorMap); |
|||
SAMPLER(sampler_BaseColorMap); |
|||
|
|||
TEXTURE2D(_MaskMap); |
|||
SAMPLER(sampler_MaskMap); |
|||
TEXTURE2D(_BentNormalMap); // Reuse sampler from normal map |
|||
SAMPLER(sampler_BentNormalMap); |
|||
|
|||
TEXTURE2D(_NormalMap); |
|||
SAMPLER(sampler_NormalMap); |
|||
TEXTURE2D(_NormalMapOS); |
|||
SAMPLER(sampler_NormalMapOS); |
|||
|
|||
TEXTURE2D(_DetailMap); |
|||
SAMPLER(sampler_DetailMap); |
|||
|
|||
TEXTURE2D(_HeightMap); |
|||
SAMPLER(sampler_HeightMap); |
|||
|
|||
TEXTURE2D(_TangentMap); |
|||
SAMPLER(sampler_TangentMap); |
|||
TEXTURE2D(_TangentMapOS); |
|||
SAMPLER(sampler_TangentMapOS); |
|||
|
|||
TEXTURE2D(_AnisotropyMap); |
|||
SAMPLER(sampler_AnisotropyMap); |
|||
|
|||
TEXTURE2D(_SubsurfaceMaskMap); |
|||
SAMPLER(sampler_SubsurfaceMaskMap); |
|||
TEXTURE2D(_ThicknessMap); |
|||
SAMPLER(sampler_ThicknessMap); |
|||
|
|||
TEXTURE2D(_SpecularColorMap); |
|||
SAMPLER(sampler_SpecularColorMap); |
|||
|
|||
TEXTURE2D(_TransmittanceColorMap); |
|||
SAMPLER(sampler_TransmittanceColorMap); |
|||
|
|||
#else |
|||
|
|||
// Set of users variables |
|||
#define PROP_DECL(type, name) type name##0, name##1, name##2, name##3 |
|||
// sampler are share by texture type inside a layered material but we need to support that a particualr layer have no texture, so we take the first sampler of available texture as the share one |
|||
// mean we must declare all sampler |
|||
#define PROP_DECL_TEX2D(name)\ |
|||
TEXTURE2D(MERGE_NAME(name, 0)); \ |
|||
SAMPLER(MERGE_NAME(MERGE_NAME(sampler, name), 0)); \ |
|||
TEXTURE2D(MERGE_NAME(name, 1)); \ |
|||
SAMPLER(MERGE_NAME(MERGE_NAME(sampler, name), 1)); \ |
|||
TEXTURE2D(MERGE_NAME(name, 2)); \ |
|||
SAMPLER(MERGE_NAME(MERGE_NAME(sampler, name), 2)); \ |
|||
TEXTURE2D(MERGE_NAME(name, 3)); \ |
|||
SAMPLER(MERGE_NAME(MERGE_NAME(sampler, name), 3)) |
|||
|
|||
|
|||
PROP_DECL_TEX2D(_BaseColorMap); |
|||
PROP_DECL_TEX2D(_MaskMap); |
|||
PROP_DECL_TEX2D(_BentNormalMap); |
|||
PROP_DECL_TEX2D(_NormalMap); |
|||
PROP_DECL_TEX2D(_NormalMapOS); |
|||
PROP_DECL_TEX2D(_DetailMap); |
|||
PROP_DECL_TEX2D(_HeightMap); |
|||
|
|||
PROP_DECL_TEX2D(_SubsurfaceMaskMap); |
|||
PROP_DECL_TEX2D(_ThicknessMap); |
|||
|
|||
TEXTURE2D(_LayerMaskMap); |
|||
SAMPLER(sampler_LayerMaskMap); |
|||
TEXTURE2D(_LayerInfluenceMaskMap); |
|||
SAMPLER(sampler_LayerInfluenceMaskMap); |
|||
|
|||
#endif |
|||
|
|||
CBUFFER_START(UnityPerMaterial) |
|||
|
|||
// shared constant between lit and layered lit |
|||
float _AlphaCutoff; |
|||
float _AlphaCutoffPrepass; |
|||
float _AlphaCutoffPostpass; |
|||
float4 _DoubleSidedConstants; |
|||
float _DistortionScale; |
|||
float _DistortionVectorScale; |
|||
float _DistortionVectorBias; |
|||
float _DistortionBlurScale; |
|||
float _DistortionBlurRemapMin; |
|||
float _DistortionBlurRemapMax; |
|||
|
|||
float _PPDMaxSamples; |
|||
float _PPDMinSamples; |
|||
float _PPDLodThreshold; |
|||
|
|||
float3 _EmissiveColor; |
|||
float _EmissiveIntensity; |
|||
float _AlbedoAffectEmissive; |
|||
|
|||
float _EnableSpecularOcclusion; |
|||
|
|||
// Transparency |
|||
float3 _TransmittanceColor; |
|||
float _IOR; |
|||
float _ATDistance; |
|||
float _ThicknessMultiplier; |
|||
|
|||
// Caution: C# code in BaseLitUI.cs call LightmapEmissionFlagsProperty() which assume that there is an existing "_EmissionColor" |
|||
// value that exist to identify if the GI emission need to be enabled. |
|||
// In our case we don't use such a mechanism but need to keep the code quiet. We declare the value and always enable it. |
|||
// TODO: Fix the code in legacy unity so we can customize the beahvior for GI |
|||
float3 _EmissionColor; |
|||
float4 _EmissiveColorMap_ST; |
|||
|
|||
float4 _InvPrimScale; // Only XY are used |
|||
|
|||
// Wind |
|||
float _InitialBend; |
|||
float _Stiffness; |
|||
float _Drag; |
|||
float _ShiverDrag; |
|||
float _ShiverDirectionality; |
|||
|
|||
#ifndef LAYERED_LIT_SHADER |
|||
|
|||
// Set of users variables |
|||
float4 _BaseColor; |
|||
float4 _BaseColorMap_ST; |
|||
float4 _BaseColorMap_TexelSize; |
|||
// =========================================================================== |
|||
// WARNING: |
|||
// On PS4, texture/sampler declarations need to be outside of CBuffers |
|||
// Otherwise those parameters are not bound correctly at runtime. |
|||
// =========================================================================== |
|||
|
|||
TEXTURE2D(_DistortionVectorMap); |
|||
SAMPLER(sampler_DistortionVectorMap); |
|||
|
|||
TEXTURE2D(_EmissiveColorMap); |
|||
SAMPLER(sampler_EmissiveColorMap); |
|||
|
|||
#ifndef LAYERED_LIT_SHADER |
|||
|
|||
TEXTURE2D(_DiffuseLightingMap); |
|||
SAMPLER(sampler_DiffuseLightingMap); |
|||
|
|||
TEXTURE2D(_BaseColorMap); |
|||
SAMPLER(sampler_BaseColorMap); |
|||
|
|||
TEXTURE2D(_MaskMap); |
|||
SAMPLER(sampler_MaskMap); |
|||
TEXTURE2D(_BentNormalMap); // Reuse sampler from normal map |
|||
SAMPLER(sampler_BentNormalMap); |
|||
|
|||
TEXTURE2D(_NormalMap); |
|||
SAMPLER(sampler_NormalMap); |
|||
TEXTURE2D(_NormalMapOS); |
|||
SAMPLER(sampler_NormalMapOS); |
|||
|
|||
TEXTURE2D(_DetailMap); |
|||
SAMPLER(sampler_DetailMap); |
|||
|
|||
TEXTURE2D(_HeightMap); |
|||
SAMPLER(sampler_HeightMap); |
|||
|
|||
TEXTURE2D(_TangentMap); |
|||
SAMPLER(sampler_TangentMap); |
|||
TEXTURE2D(_TangentMapOS); |
|||
SAMPLER(sampler_TangentMapOS); |
|||
|
|||
TEXTURE2D(_AnisotropyMap); |
|||
SAMPLER(sampler_AnisotropyMap); |
|||
|
|||
TEXTURE2D(_SubsurfaceMaskMap); |
|||
SAMPLER(sampler_SubsurfaceMaskMap); |
|||
TEXTURE2D(_ThicknessMap); |
|||
SAMPLER(sampler_ThicknessMap); |
|||
|
|||
TEXTURE2D(_SpecularColorMap); |
|||
SAMPLER(sampler_SpecularColorMap); |
|||
|
|||
TEXTURE2D(_TransmittanceColorMap); |
|||
SAMPLER(sampler_TransmittanceColorMap); |
|||
|
|||
#else |
|||
|
|||
// Set of users variables |
|||
#define PROP_DECL(type, name) type name##0, name##1, name##2, name##3 |
|||
// sampler are share by texture type inside a layered material but we need to support that a particualr layer have no texture, so we take the first sampler of available texture as the share one |
|||
// mean we must declare all sampler |
|||
#define PROP_DECL_TEX2D(name)\ |
|||
TEXTURE2D(MERGE_NAME(name, 0)); \ |
|||
SAMPLER(MERGE_NAME(MERGE_NAME(sampler, name), 0)); \ |
|||
TEXTURE2D(MERGE_NAME(name, 1)); \ |
|||
SAMPLER(MERGE_NAME(MERGE_NAME(sampler, name), 1)); \ |
|||
TEXTURE2D(MERGE_NAME(name, 2)); \ |
|||
SAMPLER(MERGE_NAME(MERGE_NAME(sampler, name), 2)); \ |
|||
TEXTURE2D(MERGE_NAME(name, 3)); \ |
|||
SAMPLER(MERGE_NAME(MERGE_NAME(sampler, name), 3)) |
|||
|
|||
|
|||
PROP_DECL_TEX2D(_BaseColorMap); |
|||
PROP_DECL_TEX2D(_MaskMap); |
|||
PROP_DECL_TEX2D(_BentNormalMap); |
|||
PROP_DECL_TEX2D(_NormalMap); |
|||
PROP_DECL_TEX2D(_NormalMapOS); |
|||
PROP_DECL_TEX2D(_DetailMap); |
|||
PROP_DECL_TEX2D(_HeightMap); |
|||
|
|||
PROP_DECL_TEX2D(_SubsurfaceMaskMap); |
|||
PROP_DECL_TEX2D(_ThicknessMap); |
|||
|
|||
TEXTURE2D(_LayerMaskMap); |
|||
SAMPLER(sampler_LayerMaskMap); |
|||
TEXTURE2D(_LayerInfluenceMaskMap); |
|||
SAMPLER(sampler_LayerInfluenceMaskMap); |
|||
|
|||
#endif |
|||
|
|||
CBUFFER_START(UnityPerMaterial) |
|||
|
|||
// shared constant between lit and layered lit |
|||
float _AlphaCutoff; |
|||
float _AlphaCutoffPrepass; |
|||
float _AlphaCutoffPostpass; |
|||
float4 _DoubleSidedConstants; |
|||
float _DistortionScale; |
|||
float _DistortionVectorScale; |
|||
float _DistortionVectorBias; |
|||
float _DistortionBlurScale; |
|||
float _DistortionBlurRemapMin; |
|||
float _DistortionBlurRemapMax; |
|||
|
|||
float _PPDMaxSamples; |
|||
float _PPDMinSamples; |
|||
float _PPDLodThreshold; |
|||
|
|||
float3 _EmissiveColor; |
|||
float _EmissiveIntensity; |
|||
float _AlbedoAffectEmissive; |
|||
|
|||
float _EnableSpecularOcclusion; |
|||
|
|||
// Transparency |
|||
float3 _TransmittanceColor; |
|||
float _IOR; |
|||
float _ATDistance; |
|||
float _ThicknessMultiplier; |
|||
|
|||
// Caution: C# code in BaseLitUI.cs call LightmapEmissionFlagsProperty() which assume that there is an existing "_EmissionColor" |
|||
// value that exist to identify if the GI emission need to be enabled. |
|||
// In our case we don't use such a mechanism but need to keep the code quiet. We declare the value and always enable it. |
|||
// TODO: Fix the code in legacy unity so we can customize the beahvior for GI |
|||
float3 _EmissionColor; |
|||
float4 _EmissiveColorMap_ST; |
|||
float _TexWorldScaleEmissive; |
|||
float4 _UVMappingMaskEmissive; |
|||
|
|||
float4 _InvPrimScale; // Only XY are used |
|||
|
|||
// Wind |
|||
float _InitialBend; |
|||
float _Stiffness; |
|||
float _Drag; |
|||
float _ShiverDrag; |
|||
float _ShiverDirectionality; |
|||
|
|||
#ifndef LAYERED_LIT_SHADER |
|||
|
|||
// Set of users variables |
|||
float4 _BaseColor; |
|||
float4 _BaseColorMap_ST; |
|||
float4 _BaseColorMap_TexelSize; |
|||
|
|||
float _Metallic; |
|||
float _Smoothness; |
|||
float _SmoothnessRemapMin; |
|||
float _SmoothnessRemapMax; |
|||
float _AORemapMin; |
|||
float _AORemapMax; |
|||
|
|||
float _NormalScale; |
|||
|
|||
float4 _DetailMap_ST; |
|||
float _DetailAlbedoScale; |
|||
float _DetailNormalScale; |
|||
float _DetailSmoothnessScale; |
|||
|
|||
float4 _HeightMap_TexelSize; // Unity facility. This will provide the size of the heightmap to the shader |
|||
|
|||
float _HeightAmplitude; |
|||
float _HeightCenter; |
|||
|
|||
float _Anisotropy; |
|||
|
|||
int _DiffusionProfile; |
|||
float _SubsurfaceMask; |
|||
float _Thickness; |
|||
float4 _ThicknessRemap; |
|||
|
|||
float _CoatMask; |
|||
|
|||
float4 _SpecularColor; |
|||
|
|||
float _TexWorldScale; |
|||
float _InvTilingScale; |
|||
float4 _UVMappingMask; |
|||
float4 _UVDetailsMappingMask; |
|||
float _LinkDetailsWithBase; |
|||
|
|||
#else // LAYERED_LIT_SHADER |
|||
|
|||
// Set of users variables |
|||
PROP_DECL(float4, _BaseColor); |
|||
float4 _BaseColorMap0_ST; |
|||
float4 _BaseColorMap1_ST; |
|||
float4 _BaseColorMap2_ST; |
|||
float4 _BaseColorMap3_ST; |
|||
|
|||
|
|||
float _Metallic; |
|||
float _Smoothness; |
|||
float _SmoothnessRemapMin; |
|||
float _SmoothnessRemapMax; |
|||
float _AORemapMin; |
|||
float _AORemapMax; |
|||
|
|||
float _NormalScale; |
|||
|
|||
float4 _DetailMap_ST; |
|||
float _DetailAlbedoScale; |
|||
float _DetailNormalScale; |
|||
float _DetailSmoothnessScale; |
|||
|
|||
float4 _HeightMap_TexelSize; // Unity facility. This will provide the size of the heightmap to the shader |
|||
|
|||
float _HeightAmplitude; |
|||
float _HeightCenter; |
|||
|
|||
float _Anisotropy; |
|||
|
|||
int _DiffusionProfile; |
|||
float _SubsurfaceMask; |
|||
float _Thickness; |
|||
float4 _ThicknessRemap; |
|||
|
|||
float _CoatMask; |
|||
|
|||
float4 _SpecularColor; |
|||
|
|||
float _TexWorldScale; |
|||
float _InvTilingScale; |
|||
float4 _UVMappingMask; |
|||
float4 _UVDetailsMappingMask; |
|||
float _LinkDetailsWithBase; |
|||
|
|||
#else // LAYERED_LIT_SHADER |
|||
|
|||
// Set of users variables |
|||
PROP_DECL(float4, _BaseColor); |
|||
float4 _BaseColorMap0_ST; |
|||
float4 _BaseColorMap1_ST; |
|||
float4 _BaseColorMap2_ST; |
|||
float4 _BaseColorMap3_ST; |
|||
|
|||
|
|||
PROP_DECL(float, _Metallic); |
|||
PROP_DECL(float, _Smoothness); |
|||
PROP_DECL(float, _SmoothnessRemapMin); |
|||
PROP_DECL(float, _SmoothnessRemapMax); |
|||
PROP_DECL(float, _AORemapMin); |
|||
PROP_DECL(float, _AORemapMax); |
|||
|
|||
PROP_DECL(float, _NormalScale); |
|||
float4 _NormalMap0_TexelSize; // Unity facility. This will provide the size of the base normal to the shader |
|||
|
|||
float4 _HeightMap0_TexelSize; |
|||
float4 _HeightMap1_TexelSize; |
|||
float4 _HeightMap2_TexelSize; |
|||
float4 _HeightMap3_TexelSize; |
|||
|
|||
float4 _DetailMap0_ST; |
|||
float4 _DetailMap1_ST; |
|||
float4 _DetailMap2_ST; |
|||
float4 _DetailMap3_ST; |
|||
PROP_DECL(float, _UVDetail); |
|||
PROP_DECL(float, _DetailAlbedoScale); |
|||
PROP_DECL(float, _DetailNormalScale); |
|||
PROP_DECL(float, _DetailSmoothnessScale); |
|||
|
|||
PROP_DECL(float, _HeightAmplitude); |
|||
PROP_DECL(float, _HeightCenter); |
|||
|
|||
PROP_DECL(int, _DiffusionProfile); |
|||
PROP_DECL(float, _SubsurfaceMask); |
|||
PROP_DECL(float, _Thickness); |
|||
PROP_DECL(float4, _ThicknessRemap); |
|||
|
|||
PROP_DECL(float, _OpacityAsDensity); |
|||
float _InheritBaseNormal1; |
|||
float _InheritBaseNormal2; |
|||
float _InheritBaseNormal3; |
|||
float _InheritBaseHeight1; |
|||
float _InheritBaseHeight2; |
|||
float _InheritBaseHeight3; |
|||
float _InheritBaseColor1; |
|||
float _InheritBaseColor2; |
|||
float _InheritBaseColor3; |
|||
PROP_DECL(float, _HeightOffset); |
|||
float _HeightTransition; |
|||
|
|||
float4 _LayerMaskMap_ST; |
|||
float _TexWorldScaleBlendMask; |
|||
PROP_DECL(float, _TexWorldScale); |
|||
PROP_DECL(float, _InvTilingScale); |
|||
float4 _UVMappingMaskBlendMask; |
|||
PROP_DECL(float4, _UVMappingMask); |
|||
PROP_DECL(float4, _UVDetailsMappingMask); |
|||
PROP_DECL(float, _LinkDetailsWithBase); |
|||
|
|||
#endif // LAYERED_LIT_SHADER |
|||
|
|||
// Tessellation specific |
|||
|
|||
#ifdef TESSELLATION_ON |
|||
float _TessellationFactor; |
|||
float _TessellationFactorMinDistance; |
|||
float _TessellationFactorMaxDistance; |
|||
float _TessellationFactorTriangleSize; |
|||
float _TessellationShapeFactor; |
|||
float _TessellationBackFaceCullEpsilon; |
|||
float _TessellationObjectScale; |
|||
float _TessellationTilingScale; |
|||
#endif |
|||
|
|||
CBUFFER_END |
|||
|
|||
PROP_DECL(float, _Metallic); |
|||
PROP_DECL(float, _Smoothness); |
|||
PROP_DECL(float, _SmoothnessRemapMin); |
|||
PROP_DECL(float, _SmoothnessRemapMax); |
|||
PROP_DECL(float, _AORemapMin); |
|||
PROP_DECL(float, _AORemapMax); |
|||
|
|||
PROP_DECL(float, _NormalScale); |
|||
float4 _NormalMap0_TexelSize; // Unity facility. This will provide the size of the base normal to the shader |
|||
|
|||
float4 _HeightMap0_TexelSize; |
|||
float4 _HeightMap1_TexelSize; |
|||
float4 _HeightMap2_TexelSize; |
|||
float4 _HeightMap3_TexelSize; |
|||
|
|||
float4 _DetailMap0_ST; |
|||
float4 _DetailMap1_ST; |
|||
float4 _DetailMap2_ST; |
|||
float4 _DetailMap3_ST; |
|||
PROP_DECL(float, _UVDetail); |
|||
PROP_DECL(float, _DetailAlbedoScale); |
|||
PROP_DECL(float, _DetailNormalScale); |
|||
PROP_DECL(float, _DetailSmoothnessScale); |
|||
|
|||
PROP_DECL(float, _HeightAmplitude); |
|||
PROP_DECL(float, _HeightCenter); |
|||
|
|||
PROP_DECL(int, _DiffusionProfile); |
|||
PROP_DECL(float, _SubsurfaceMask); |
|||
PROP_DECL(float, _Thickness); |
|||
PROP_DECL(float4, _ThicknessRemap); |
|||
|
|||
PROP_DECL(float, _OpacityAsDensity); |
|||
float _InheritBaseNormal1; |
|||
float _InheritBaseNormal2; |
|||
float _InheritBaseNormal3; |
|||
float _InheritBaseHeight1; |
|||
float _InheritBaseHeight2; |
|||
float _InheritBaseHeight3; |
|||
float _InheritBaseColor1; |
|||
float _InheritBaseColor2; |
|||
float _InheritBaseColor3; |
|||
PROP_DECL(float, _HeightOffset); |
|||
float _HeightTransition; |
|||
|
|||
float4 _LayerMaskMap_ST; |
|||
float _TexWorldScaleBlendMask; |
|||
PROP_DECL(float, _TexWorldScale); |
|||
PROP_DECL(float, _InvTilingScale); |
|||
float4 _UVMappingMaskBlendMask; |
|||
PROP_DECL(float4, _UVMappingMask); |
|||
PROP_DECL(float4, _UVDetailsMappingMask); |
|||
PROP_DECL(float, _LinkDetailsWithBase); |
|||
|
|||
#endif // LAYERED_LIT_SHADER |
|||
|
|||
// Tessellation specific |
|||
|
|||
#ifdef TESSELLATION_ON |
|||
float _TessellationFactor; |
|||
float _TessellationFactorMinDistance; |
|||
float _TessellationFactorMaxDistance; |
|||
float _TessellationFactorTriangleSize; |
|||
float _TessellationShapeFactor; |
|||
float _TessellationBackFaceCullEpsilon; |
|||
float _TessellationObjectScale; |
|||
float _TessellationTilingScale; |
|||
#endif |
|||
|
|||
CBUFFER_END |
|
|||
void GetBuiltinData(FragInputs input, SurfaceData surfaceData, float alpha, float3 bentNormalWS, float depthOffset, out BuiltinData builtinData) |
|||
{ |
|||
// Builtin Data |
|||
builtinData.opacity = alpha; |
|||
|
|||
// TODO: Sample lightmap/lightprobe/volume proxy |
|||
// This should also handle projective lightmap |
|||
builtinData.bakeDiffuseLighting = SampleBakedGI(input.positionWS, bentNormalWS, input.texCoord1, input.texCoord2); |
|||
|
|||
// It is safe to call this function here as surfaceData have been filled |
|||
// We want to know if we must enable transmission on GI for SSS material, if the material have no SSS, this code will be remove by the compiler. |
|||
BSDFData bsdfData = ConvertSurfaceDataToBSDFData(surfaceData); |
|||
if (HasMaterialFeatureFlag(bsdfData.materialFeatures, MATERIALFEATUREFLAGS_LIT_TRANSMISSION)) |
|||
{ |
|||
// For now simply recall the function with inverted normal, the compiler should be able to optimize the lightmap case to not resample the directional lightmap |
|||
// however it will not optimize the lightprobe case due to the proxy volume relying on dynamic if (we rely must get right of this dynamic if), not a problem for SH9, but a problem for proxy volume. |
|||
// TODO: optimize more this code. |
|||
// Add GI transmission contribution by resampling the GI for inverted vertex normal |
|||
builtinData.bakeDiffuseLighting += SampleBakedGI(input.positionWS, -input.worldToTangent[2], input.texCoord1, input.texCoord2) * bsdfData.transmittance; |
|||
} |
|||
|
|||
#ifdef SHADOWS_SHADOWMASK |
|||
float4 shadowMask = SampleShadowMask(input.positionWS, input.texCoord1); |
|||
builtinData.shadowMask0 = shadowMask.x; |
|||
builtinData.shadowMask1 = shadowMask.y; |
|||
builtinData.shadowMask2 = shadowMask.z; |
|||
builtinData.shadowMask3 = shadowMask.w; |
|||
#else |
|||
builtinData.shadowMask0 = 0.0; |
|||
builtinData.shadowMask1 = 0.0; |
|||
builtinData.shadowMask2 = 0.0; |
|||
builtinData.shadowMask3 = 0.0; |
|||
#endif |
|||
|
|||
// Emissive Intensity is only use here, but is part of BuiltinData to enforce UI parameters as we want the users to fill one color and one intensity |
|||
builtinData.emissiveIntensity = _EmissiveIntensity; // We still store intensity here so we can reuse it with debug code |
|||
|
|||
builtinData.emissiveColor = _EmissiveColor * builtinData.emissiveIntensity * lerp(float3(1.0, 1.0, 1.0), surfaceData.baseColor.rgb, _AlbedoAffectEmissive); |
|||
#ifdef _EMISSIVE_COLOR_MAP |
|||
|
|||
// Use layer0 of LayerTexCoord to retrieve emissive color mapping information |
|||
LayerTexCoord layerTexCoord; |
|||
ZERO_INITIALIZE(LayerTexCoord, layerTexCoord); |
|||
layerTexCoord.vertexNormalWS = input.worldToTangent[2].xyz; |
|||
layerTexCoord.triplanarWeights = ComputeTriplanarWeights(layerTexCoord.vertexNormalWS); |
|||
|
|||
int mappingType = UV_MAPPING_UVSET; |
|||
#if defined(_EMISSIVE_MAPPING_PLANAR) |
|||
mappingType = UV_MAPPING_PLANAR; |
|||
#elif defined(_EMISSIVE_MAPPING_TRIPLANAR) |
|||
mappingType = UV_MAPPING_TRIPLANAR; |
|||
#endif |
|||
|
|||
// Be sure that the compiler is aware that we don't use UV1 to UV3 for main layer so it can optimize code |
|||
#ifndef LAYERED_LIT_SHADER |
|||
ComputeLayerTexCoord(input.texCoord0, input.texCoord1, input.texCoord2, input.texCoord3, float4(1.0, 0.0, 0.0, 0.0), float4(1.0, 0.0, 0.0, 0.0), |
|||
#else |
|||
ComputeLayerTexCoord0(input.texCoord0, input.texCoord1, input.texCoord2, input.texCoord3, _UVMappingMaskEmissive, _UVMappingMaskEmissive, |
|||
#endif |
|||
_EmissiveColorMap_ST.xy, _EmissiveColorMap_ST.zw, float2(0.0, 0.0), float2(0.0, 0.0), 1.0, false, |
|||
input.positionWS, _TexWorldScaleEmissive, |
|||
mappingType, layerTexCoord); |
|||
|
|||
#ifndef LAYERED_LIT_SHADER |
|||
UVMapping emissiveMapMapping = layerTexCoord.base; |
|||
#else |
|||
UVMapping emissiveMapMapping = layerTexCoord.base0; |
|||
#endif |
|||
|
|||
builtinData.emissiveColor *= SAMPLE_UVMAPPING_TEXTURE2D(_EmissiveColorMap, sampler_EmissiveColorMap, emissiveMapMapping).rgb; |
|||
#endif // _EMISSIVE_COLOR_MAP |
|||
|
|||
builtinData.velocity = float2(0.0, 0.0); |
|||
|
|||
#if (SHADERPASS == SHADERPASS_DISTORTION) || defined(DEBUG_DISPLAY) |
|||
float3 distortion = SAMPLE_TEXTURE2D(_DistortionVectorMap, sampler_DistortionVectorMap, input.texCoord0).rgb; |
|||
distortion.rg = distortion.rg * _DistortionVectorScale.xx + _DistortionVectorBias.xx; |
|||
builtinData.distortion = distortion.rg * _DistortionScale; |
|||
builtinData.distortionBlur = clamp(distortion.b * _DistortionBlurScale, 0.0, 1.0) * (_DistortionBlurRemapMax - _DistortionBlurRemapMin) + _DistortionBlurRemapMin; |
|||
#else |
|||
builtinData.distortion = float2(0.0, 0.0); |
|||
builtinData.distortionBlur = 0.0; |
|||
#endif |
|||
|
|||
builtinData.depthOffset = depthOffset; |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: b18343016003d0c4aaa0dd7778d3b816 |
|||
ShaderImporter: |
|||
externalObjects: {} |
|||
defaultTextures: [] |
|||
nonModifiableTextures: [] |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
撰写
预览
正在加载...
取消
保存
Reference in new issue