diff options
| author | yum <yum.food.vr@gmail.com> | 2024-11-07 18:09:04 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-11-07 18:09:04 -0800 |
| commit | 9eb5303f72179c33025766d7a5451920b836f7ad (patch) | |
| tree | 7288979685ee555ca1828f51698ef5ecad44f20d | |
| parent | e2d54abcc939bf949355e2885913291b009d0eea (diff) | |
Fog domain warping now occurs in 3d
| -rw-r--r-- | Editor/tooner.cs | 5 | ||||
| -rw-r--r-- | feature_macros.cginc | 1 | ||||
| -rw-r--r-- | fog.cginc | 47 | ||||
| -rw-r--r-- | fog_ltcgi.cginc | 36 | ||||
| -rw-r--r-- | globals.cginc | 3 | ||||
| -rw-r--r-- | tooner.shader | 3 |
6 files changed, 15 insertions, 80 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index 6f37937..6747bcb 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -2091,11 +2091,6 @@ public class ToonerGUI : ShaderGUI { TexturePropertySingleLine( MakeLabel(bc, "3D Noise"), bc); - bc = FindProperty("_Gimmick_Fog_00_Noise_Normals"); - TexturePropertySingleLine( - MakeLabel(bc, "3D Noise (RGB normals)"), - bc); - SetKeyword("_GIMMICK_FOG_00_NOISE_3D_NORMALS", bc.textureValue); bc = FindProperty("_Gimmick_Fog_00_Noise_2D"); TexturePropertySingleLine( MakeLabel(bc, "2D Noise (optional)"), diff --git a/feature_macros.cginc b/feature_macros.cginc index 0a5b083..3367e7a 100644 --- a/feature_macros.cginc +++ b/feature_macros.cginc @@ -215,7 +215,6 @@ #pragma shader_feature_local _ SSR_MASK #pragma shader_feature_local _ _GIMMICK_FOG_00 #pragma shader_feature_local _ _GIMMICK_FOG_00_NOISE_2D -#pragma shader_feature_local _ _GIMMICK_FOG_00_NOISE_3D_NORMALS #pragma shader_feature_local _ _GIMMICK_FOG_00_EMITTER_TEXTURE #pragma shader_feature_local _ _GIMMICK_FOG_00_EMITTER_VARIABLE_DENSITY #pragma shader_feature_local _ _GIMMICK_FOG_00_EMITTER_1 @@ -2,7 +2,6 @@ #include "atrix256.cginc" #include "cnlohr.cginc" -#include "fog_ltcgi.cginc" #include "globals.cginc" #include "interpolators.cginc" #include "math.cginc" @@ -23,7 +22,7 @@ struct Fog00PBR { #define FOG_PERLIN_NOISE_SCALE 32 -float perlin_noise_3d_tex(float3 p) +float3 perlin_noise_3d_tex(float3 p) { // 1/256 = 0.00390625 return _Gimmick_Fog_00_Noise.SampleLevel(trilinear_repeat_s, p.xyz * 0.00390625, 0); @@ -31,11 +30,12 @@ float perlin_noise_3d_tex(float3 p) #define FBM_OCTAVES 3 -float perlin_noise_3d_tex_fbm(float3 p) +float3 perlin_noise_3d_tex_fbm(float3 p) { - float res = perlin_noise_3d_tex(p); + float3 res = perlin_noise_3d_tex(p); float p_scale = 1; - float d_scale = .6666; + //float d_scale = .66666; + float d_scale = .571428571; for (uint i = 1; i < FBM_OCTAVES; i++) { p_scale *= 2; d_scale *= .5; @@ -44,29 +44,16 @@ float perlin_noise_3d_tex_fbm(float3 p) return res; } -float3 perlin_noise_3d_tex_normal(float3 p) +// idea from here https://iquilezles.org/articles/warp/ +float3 perlin_noise_3d_tex_warp(float3 p) { - // 1/256 = 0.00390625 - return _Gimmick_Fog_00_Noise_Normals.SampleLevel(trilinear_repeat_s, p.xyz * 0.00390625, 0) * 2 - 1; -} - -float3 perlin_noise_3d_tex_normal_fbm(float3 p) -{ - float3 res = perlin_noise_3d_tex_normal(p); - float p_scale = 1; - float d_scale = .6666; - for (uint i = 1; i < FBM_OCTAVES; i++) { - p_scale *= 2; - d_scale *= .5; - res += perlin_noise_3d_tex_normal(p*p_scale)*d_scale; - } - return res; + return perlin_noise_3d_tex(p + perlin_noise_3d_tex(p + perlin_noise_3d_tex(p)*100) * 500); } // idea from here https://iquilezles.org/articles/warp/ -float perlin_noise_3d_tex_warp(float3 p) +float3 perlin_noise_3d_tex_fbm_warp(float3 p) { - return perlin_noise_3d_tex_fbm(p + perlin_noise_3d_tex(p + perlin_noise_3d_tex_fbm(p)*200) * 500); + return perlin_noise_3d_tex_fbm(p + perlin_noise_3d_tex_fbm(p + perlin_noise_3d_tex_fbm(p)*100) * 500); } float3 light_fog00( @@ -87,7 +74,7 @@ float3 light_fog00( } float map(float3 p, out float3 normal) { -#if 0 +#if 1 float3 t = _Time[0] * FOG_PERLIN_NOISE_SCALE; t.y *= .3; #else @@ -100,11 +87,10 @@ float map(float3 p, out float3 normal) { float radius2 = clamp(_Gimmick_Fog_00_Radius * _Gimmick_Fog_00_Radius - dot(p, p), 0, RADIUS_TRANS_WIDTH) * RADIUS_TRANS_WIDTH_RCP; float3 pp = p * _Gimmick_Fog_00_Noise_Scale * FOG_PERLIN_NOISE_SCALE; - float density = perlin_noise_3d_tex_warp(pp+t) * radius2; - normal = perlin_noise_3d_tex_normal_fbm(pp+t) * density; + normal = normalize(perlin_noise_3d_tex(pp+t) * 2 - 1); + float density = perlin_noise_3d_tex_fbm_warp(pp+t) * radius2; - normal = normalize(normal); - return saturate(density); + return density; } #if defined(_GIMMICK_FOG_00_EMITTER_TEXTURE) @@ -321,11 +307,6 @@ Fog00PBR getFog00(v2f i, ToonerData tdata) { } #endif - if (_Gimmick_Fog_00_Enable_Area_Lighting) { - ltcgi_acc acc = (ltcgi_acc) 0; - LTCGI_Contribution(acc, p, map_normal, rd, /*roughness=*/0.5, 0); - diffuse_light += acc.diffuse; - } diffuse_light *= _Gimmick_Fog_00_Emitter_Brightness; // Scaling brightness by sqrt(step_size) seems to look more consistent? float NoL = dot(map_normal, direct_light.dir); diff --git a/fog_ltcgi.cginc b/fog_ltcgi.cginc deleted file mode 100644 index dd6786c..0000000 --- a/fog_ltcgi.cginc +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef __FOG_LTCGI_INC -#define __FOG_LTCGI_INC - -#if defined(_GIMMICK_FOG_00) - -#define LTCGI_SPECULAR_OFF -#define LTCGI_ALWAYS_LTC_DIFFUSE -#define LTCGI_FAST_SAMPLING - -#include "Third_Party/at.pimaker.ltcgi/Shaders/LTCGI_structs.cginc" - -#undef LTCGI_AVATAR_MODE - -struct ltcgi_acc { - float3 diffuse; -}; - -void ltcgi_cb_diffuse(inout ltcgi_acc acc, in ltcgi_output output); - -#define LTCGI_V2_CUSTOM_INPUT ltcgi_acc -#define LTCGI_V2_DIFFUSE_CALLBACK ltcgi_cb_diffuse - -// modified exponential impulse from here: https://iquilezles.org/articles/functions/ -float reshape_intensity(float x) { - x = saturate(x*4); - return (2*x*exp(1-2*x))*.1; -} - -#include "Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc" -void ltcgi_cb_diffuse(inout ltcgi_acc acc, in ltcgi_output output) { - // Intensity varies from 0 to 1. - acc.diffuse += reshape_intensity(output.intensity) * output.color; -} -#endif // _GIMMICK_FOG_00 - -#endif // __FOG_LTCGI_INC diff --git a/globals.cginc b/globals.cginc index 1666d4d..43c6502 100644 --- a/globals.cginc +++ b/globals.cginc @@ -755,9 +755,6 @@ float _Gimmick_Fog_00_Alpha_Cutoff; float _Gimmick_Fog_00_Ray_Origin_Randomization; float _Gimmick_Fog_00_Lod_Half_Life; texture3D _Gimmick_Fog_00_Noise; -#if defined(_GIMMICK_FOG_00_NOISE_3D_NORMALS) -texture3D _Gimmick_Fog_00_Noise_Normals; -#endif #if defined(_GIMMICK_FOG_00_NOISE_2D) texture2D _Gimmick_Fog_00_Noise_2D; float4 _Gimmick_Fog_00_Noise_2D_TexelSize; diff --git a/tooner.shader b/tooner.shader index 437c16a..d696e58 100644 --- a/tooner.shader +++ b/tooner.shader @@ -646,8 +646,7 @@ Shader "yum_food/tooner" _Gimmick_Fog_00_Enable_Static("Enable fog 00", Float) = 0 _Gimmick_Fog_00_Enable_Area_Lighting("Enable fog 00 area lighting", Float) = 1 - _Gimmick_Fog_00_Noise("3D noise", 3D) = "black" {} - _Gimmick_Fog_00_Noise_Normals("3D noise (normals)", 3D) = "white" {} + _Gimmick_Fog_00_Noise("3D noise (RGB)", 3D) = "white" {} _Gimmick_Fog_00_Noise_2D("2D noise", 2D) = "black" {} _Gimmick_Fog_00_Max_Ray("Max ray", Float) = 25 _Gimmick_Fog_00_Radius("Radius", Float) = 25 |
