From 14cdf12e17d2b17676135457e42bde391ff3f313 Mon Sep 17 00:00:00 2001 From: yum Date: Thu, 20 Feb 2025 18:48:18 -0800 Subject: Add emission, fine-tune quantized specular --- 2ner.cginc | 4 ++++ 2ner.shader | 8 ++++++++ features.cginc | 4 ++++ filamented.cginc | 7 +------ globals.cginc | 6 ++++++ yum_lighting.cginc | 7 ++++--- yum_pbr.cginc | 7 +++++++ 7 files changed, 34 insertions(+), 9 deletions(-) diff --git a/2ner.cginc b/2ner.cginc index 5cb5d71..34fe7bd 100644 --- a/2ner.cginc +++ b/2ner.cginc @@ -100,6 +100,10 @@ float4 frag(v2f i) : SV_Target { float4 lit = YumBRDF(i, l, pbr); +#if defined(_EMISSION) + lit.rgb += pbr.emission; +#endif + UNITY_EXTRACT_FOG_FROM_EYE_VEC(i); UNITY_APPLY_FOG(_unity_fogCoord, lit.rgb); return lit; diff --git a/2ner.shader b/2ner.shader index 98afd23..3780ae6 100644 --- a/2ner.shader +++ b/2ner.shader @@ -34,6 +34,14 @@ Shader "yum_food/2ner" [PanningTexture][Normal]_BumpMap("Normals", 2D) = "bump" {} _BumpScale("Normal Intensity", Range(0, 10)) = 1 _Clip("Alpha Cuttoff", Range(0, 1.001)) = 0.5 + //ifex _Emission_Enabled==0 + [HideInInspector] m_start_Emission("Emission", Float) = 0 + [ThryToggle(_EMISSION)]_Emission_Enabled("Enable", Float) = 0 + _EmissionColor("Color", Color) = (1, 1, 1, 1) + _EmissionMap("Emission", 2D) = "white" {} + [HideInInspector] m_end_Emission("Emission", Float) = 0 + //endex + //ifex _Ambient_Occlusion_Enabled==0 [HideInInspector] m_start_AO("Ambient occlusion", Float) = 0 [ThryToggle(_AMBIENT_OCCLUSION)]_Ambient_Occlusion_Enabled("Enable", Float) = 0 diff --git a/features.cginc b/features.cginc index 0bfe479..9d1be92 100644 --- a/features.cginc +++ b/features.cginc @@ -5,6 +5,10 @@ #pragma shader_feature_local _AMBIENT_OCCLUSION //endex +//ifex _Emission_Enabled==0 +#pragma shader_feature_local _EMISSION +//endex + //ifex _Wrapped_Lighting_Enabled==0 #pragma shader_feature_local _WRAPPED_LIGHTING //endex diff --git a/filamented.cginc b/filamented.cginc index 9895361..9edfca5 100644 --- a/filamented.cginc +++ b/filamented.cginc @@ -343,12 +343,7 @@ half3 Unity_GlossyEnvironment_local (UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_G half3 R = glossIn.reflUVW; half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); - half3 color = DecodeHDR(rgbm, hdr); -#if defined(_QUANTIZE_SPECULAR) - float luminance = dot(color, float3(0.2126, 0.7152, 0.0722)); // convert to luminance - color = color * floor(luminance * _Quantize_Specular_Steps) / _Quantize_Specular_Steps; -#endif - return color; + return DecodeHDR(rgbm, hdr); } inline half3 UnityGI_prefilteredRadiance(const UnityGIInput data, diff --git a/globals.cginc b/globals.cginc index 1347a52..08f0e34 100644 --- a/globals.cginc +++ b/globals.cginc @@ -15,6 +15,12 @@ half _BumpScale; float _BumpShadowHeightScale; float _BumpShadowHardness; +#if defined(_EMISSION) +sampler2D _EmissionMap; +float4 _EmissionMap_ST; +float3 _EmissionColor; +#endif + #if defined(_AMBIENT_OCCLUSION) sampler2D _OcclusionMap; float _OcclusionStrength; diff --git a/yum_lighting.cginc b/yum_lighting.cginc index a7cb4ab..758fdb2 100644 --- a/yum_lighting.cginc +++ b/yum_lighting.cginc @@ -141,14 +141,15 @@ YumLighting GetYumLighting(v2f i, YumPbr pbr) { light.diffuse = light.diffuse * floor(diffuse_luminance * _Quantize_Diffuse_Steps) / _Quantize_Diffuse_Steps; #endif - light.NoL = saturate(dot(pbr.normal, light.dir)); + light.NoL = dot(pbr.normal, light.dir); #if defined(_QUANTIZE_NOL) light.NoL = floor(light.NoL * _Quantize_NoL_Steps) / _Quantize_NoL_Steps; #endif #if defined(_WRAPPED_LIGHTING) - light.NoL_wrapped_s = wrapNoL(light.NoL, _Wrap_NoL_Specular_Strength); - light.NoL_wrapped_d = wrapNoL(light.NoL, _Wrap_NoL_Diffuse_Strength); + light.NoL_wrapped_s = saturate(wrapNoL(light.NoL, _Wrap_NoL_Specular_Strength)); + light.NoL_wrapped_d = saturate(wrapNoL(light.NoL, _Wrap_NoL_Diffuse_Strength)); #endif + light.NoL = saturate(light.NoL); light.attenuation = getShadowAttenuation(i); diff --git a/yum_pbr.cginc b/yum_pbr.cginc index 2f7113b..dbb8d75 100644 --- a/yum_pbr.cginc +++ b/yum_pbr.cginc @@ -9,6 +9,9 @@ struct YumPbr { float4 albedo; float3 normal; +#if defined(_EMISSION) + float3 emission; +#endif float smoothness; float roughness; float roughness_perceptual; @@ -34,6 +37,10 @@ YumPbr GetYumPbr(v2f i) { float3x3 tangentToWorld = float3x3(i.tangent, i.binormal, i.normal); result.normal = normalize(mul(normal_raw, tangentToWorld)); +#if defined(_EMISSION) + result.emission = tex2D(_EmissionMap, UV_SCOFF(i, _EmissionMap_ST, /*which_channel=*/0)) * _EmissionColor; +#endif + #if defined(_METALLICS) float4 metallic_gloss = tex2D(_MetallicGlossMap, UV_SCOFF(i, _MetallicGlossMap_ST, /*which_channel=*/0)); float metallic = metallic_gloss.r * _Metallic; -- cgit v1.2.3