summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-11-07 18:09:04 -0800
committeryum <yum.food.vr@gmail.com>2024-11-07 18:09:04 -0800
commit9eb5303f72179c33025766d7a5451920b836f7ad (patch)
tree7288979685ee555ca1828f51698ef5ecad44f20d
parente2d54abcc939bf949355e2885913291b009d0eea (diff)
Fog domain warping now occurs in 3d
-rw-r--r--Editor/tooner.cs5
-rw-r--r--feature_macros.cginc1
-rw-r--r--fog.cginc47
-rw-r--r--fog_ltcgi.cginc36
-rw-r--r--globals.cginc3
-rw-r--r--tooner.shader3
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
diff --git a/fog.cginc b/fog.cginc
index 779553f..02e7e75 100644
--- a/fog.cginc
+++ b/fog.cginc
@@ -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