Browse Source

- Update Fog

ShiroSmith 7 năm trước cách đây
mục cha
commit
b58f1a02be
2 tập tin đã thay đổi với 8 bổ sung12 xóa
  1. 5 5
      h3d/shader/pbr/Fog.hx
  2. 3 7
      hxd/prefab/rfx/Fog.hx

+ 5 - 5
h3d/shader/pbr/Fog.hx

@@ -71,14 +71,14 @@ class Fog extends h3d.shader.ScreenShader {
 		}
 
 		function getFogDensity(pos: Vec3) : Float{
+			var speedOffset = time * speed / tilling;
 			var fadeFactor = 1 - (abs((pos.z - fogHeight) / (fogRange)));
 			fadeFactor *= fadeFactor;
 			fadeFactor = mix(1, fadeFactor, fadeStrength);
-			var turbulenceUV = ((pos.xy / turbulenceTilling) -(pos.z * 0.5)) + time * turbulenceSpeed + time * speed;
-			var turbulence = textureLod(turbulenceText, turbulenceUV * turbulenceScale, 0).rg;
-			var textureOffset = turbulenceIntensity * turbulence;
-			var uv = (pos.xy / tilling) + textureOffset + time * speed;
-			var fog = textureLod(texture, uv, 0).r;
+			var uv = (pos.xy / tilling) + speedOffset;
+			var turbulenceUV = time * turbulenceSpeed + uv /*- (pos.z * 0.5)*/;
+			var turbulence = textureLod(turbulenceText, turbulenceUV * turbulenceScale, 0).rg * turbulenceIntensity;
+			var fog = textureLod(texture, uv + turbulence, 0).r;
 			return fog * density * fadeFactor;
 		}
 

+ 3 - 7
hxd/prefab/rfx/Fog.hx

@@ -13,7 +13,6 @@ typedef FogProps = {
 
 	var turbulenceText : String;
 	var turbulenceScale : Float;
-	var turbulenceTilling : Float;
 	var turbulenceIntensity : Float;
 	var turbulenceSpeed  : Float;
 
@@ -47,7 +46,6 @@ class Fog extends RendererFX {
 
 				turbulenceText : null,
 				turbulenceScale: 0.0,
-				turbulenceTilling : 1.0,
 				turbulenceIntensity : 0.0,
 				turbulenceSpeed : 0.0,
 
@@ -115,12 +113,11 @@ class Fog extends RendererFX {
 			fogPass.shader.maxStepCount = props.stepCount;
 			fogPass.shader.tilling = new h3d.Vector(props.tilling, props.tilling);
 			fogPass.shader.speed = new h3d.Vector(Math.cos(Math.degToRad(props.direction)) * props.speed, Math.sin(Math.degToRad(props.direction)) * props.speed);
-			fogPass.shader.turbulenceSpeed = new h3d.Vector(props.turbulenceSpeed, props.turbulenceSpeed);
+			fogPass.shader.turbulenceSpeed = new h3d.Vector(props.turbulenceSpeed / 10.0, props.turbulenceSpeed / 10.0);
 			fogPass.shader.time = ctx.time;
 			fogPass.shader.texture = fogTexture == null ? h3d.mat.Texture.fromColor(0xFFFFFF) : fogTexture;
 			fogPass.shader.turbulenceText = fogTurbulence == null ? h3d.mat.Texture.fromColor(0xFFFFFF) : fogTurbulence;
 			fogPass.shader.turbulenceScale = props.turbulenceScale;
-			fogPass.shader.turbulenceTilling = new h3d.Vector(props.turbulenceTilling, props.turbulenceTilling);
 			fogPass.shader.turbulenceIntensity = props.turbulenceIntensity;
 			fogPass.shader.color = h3d.Vector.fromColor(props.color);
 			fogPass.render();
@@ -145,7 +142,7 @@ class Fog extends RendererFX {
 	override function getHideProps() {
 		var p = super.getHideProps();
 		p.allowChildren = function(name) return name == "noise";
-		//p.onChildUpdate = function(p) syncFogTexture();
+		p.onChildUpdate = function(p) syncFogTexture();
 		return p;
 	}
 
@@ -157,7 +154,7 @@ class Fog extends RendererFX {
 			<div class="group" name="Fog">
 				<dt>Color</dt><dd><input type="color" field="color"></dd>
 				<dt>Tilling</dt><dd><input type="range" min="1" max="100" field="tilling"></dd>
-				<dt>Density</dt><dd><input type="range" min="0" max="100" field="density"></dd>
+				<dt>Density</dt><dd><input type="range" min="0" max="2" field="density"></dd>
 				<dt>Height</dt><dd><input type="range" min="-20" max="20" field="height"></dd>
 				<dt>Range</dt><dd><input type="range" min="1" max="10" field="range"></dd>
 				<dt>Fade Strength</dt><dd><input type="range" min="0" max="1" field="fadeStrength"></dd>
@@ -172,7 +169,6 @@ class Fog extends RendererFX {
 			<div class="group" name="Turbulence">
 				<dt>Texture</dt><input type="texturepath" field="turbulenceText"/>
 				<dt>Scale</dt><dd><input type="range" min="0" max="1" field="turbulenceScale"></dd>
-				<dt>Tilling</dt><dd><input type="range" min="0" max="2" field="turbulenceTilling"></dd>
 				<dt>Speed</dt><dd><input type="range" min="0" max="10" field="turbulenceSpeed"></dd>
 				<dt>Intensity</dt><dd><input type="range" min="0" max="1" field="turbulenceIntensity"></dd>
 			</div>