|
@@ -1,6 +1,6 @@
|
|
|
package hrt.prefab.rfx;
|
|
|
|
|
|
-class GenFogShader extends h3d.shader.ScreenShader {
|
|
|
+class GenFogShader extends PbrShader {
|
|
|
|
|
|
static var SRC = {
|
|
|
|
|
@@ -19,27 +19,12 @@ class GenFogShader extends h3d.shader.ScreenShader {
|
|
|
@const var usePosition : Bool;
|
|
|
@param var position : Vec3;
|
|
|
|
|
|
- @ignore @param var depthTexture : Channel;
|
|
|
- @ignore @param var cameraPos : Vec3;
|
|
|
- @ignore @param var cameraInverseViewProj : Mat4;
|
|
|
-
|
|
|
- function getPosition( uv: Vec2 ) : Vec3 {
|
|
|
- var depth = depthTexture.get(uv);
|
|
|
- var uv2 = uvToScreen(calculatedUV);
|
|
|
- var isSky = 1 - ceil(depth);
|
|
|
- depth = mix(depth, 1, isSky);
|
|
|
- var temp = vec4(uv2, depth, 1) * cameraInverseViewProj;
|
|
|
- var originWS = temp.xyz / temp.w;
|
|
|
- return originWS;
|
|
|
- }
|
|
|
-
|
|
|
function fragment() {
|
|
|
- var calculatedUV = input.uv;
|
|
|
- var origin = getPosition(calculatedUV);
|
|
|
+ var origin = getPosition();
|
|
|
var amount = 0.;
|
|
|
|
|
|
if( distanceScale != 0 ) {
|
|
|
- var distance = (origin - (usePosition ? position : cameraPos)).length() - cameraDistance;
|
|
|
+ var distance = (origin - (usePosition ? position : camera.position)).length() - cameraDistance;
|
|
|
amount += clamp((distance - startDistance) * distanceScale, 0, 1) * distanceOpacity;
|
|
|
}
|
|
|
|
|
@@ -49,7 +34,7 @@ class GenFogShader extends h3d.shader.ScreenShader {
|
|
|
amount += clamp((height - startHeight) * heightScale, 0, 1) * heightOpacity;
|
|
|
}
|
|
|
|
|
|
- var fogColor = mix(startColor, endColor, amount);
|
|
|
+ var fogColor = mix(startColor, endColor, clamp(amount,0,1));
|
|
|
pixelColor = fogColor;
|
|
|
}
|
|
|
|
|
@@ -120,7 +105,6 @@ class GenFog extends RendererFX {
|
|
|
if( (step == AfterTonemapping && p.renderMode == "AfterTonemapping") || (step == BeforeTonemapping && p.renderMode == "BeforeTonemapping") ) {
|
|
|
r.mark("DistanceFog");
|
|
|
var ctx = r.ctx;
|
|
|
- var depth : hxsl.ChannelTexture = ctx.getGlobal("depthMap");
|
|
|
|
|
|
fogPass.shader.startDistance = p.startDistance;
|
|
|
fogPass.shader.distanceScale = 1 / (p.endDistance - p.startDistance);
|
|
@@ -139,12 +123,8 @@ class GenFog extends RendererFX {
|
|
|
fogPass.shader.position.set(p.posX, p.posY, p.posZ);
|
|
|
fogPass.shader.usePosition = p.usePosition;
|
|
|
|
|
|
- fogPass.shader.depthTextureChannel = depth.channel;
|
|
|
- fogPass.shader.depthTexture = depth.texture;
|
|
|
-
|
|
|
- fogPass.shader.cameraPos = ctx.camera.pos;
|
|
|
- fogPass.shader.cameraInverseViewProj.load(ctx.camera.getInverseViewProj());
|
|
|
|
|
|
+ fogPass.setGlobals(ctx);
|
|
|
fogPass.render();
|
|
|
}
|
|
|
}
|