瀏覽代碼

Update distanceFog and decal

ShiroSmith 6 年之前
父節點
當前提交
82fc254c32
共有 2 個文件被更改,包括 22 次插入4 次删除
  1. 10 2
      hrt/prefab/l3d/AdvancedDecal.hx
  2. 12 2
      hrt/prefab/rfx/DistanceFog.hx

+ 10 - 2
hrt/prefab/l3d/AdvancedDecal.hx

@@ -71,6 +71,13 @@ class AdvancedDecal extends Object3D {
 					mesh.material.mainPass.addShader(shader);
 				}
 				mesh.material.mainPass.setPassName("beforeTonemappingDecal");
+			case AfterTonemapping:
+				var shader = mesh.material.mainPass.getShader(h3d.shader.pbr.VolumeDecal.DecalOverlay);
+				if( shader == null ) {
+					shader = new h3d.shader.pbr.VolumeDecal.DecalOverlay();
+					mesh.material.mainPass.addShader(shader);
+				}
+				mesh.material.mainPass.setPassName("afterTonemappingDecal");
 			default:
 		}
 
@@ -108,7 +115,7 @@ class AdvancedDecal extends Object3D {
 					shader.fadeStart = fadeStart;
 					shader.fadeEnd = fadeEnd;
 				}
-			case BeforeTonemapping:
+			case BeforeTonemapping, AfterTonemapping:
 				var shader = mesh.material.mainPass.getShader(h3d.shader.pbr.VolumeDecal.DecalOverlay);
 				if( shader != null ){
 					shader.colorTexture = albedoMap != null ? ctx.loadTexture(albedoMap) : null;
@@ -192,7 +199,8 @@ class AdvancedDecal extends Object3D {
 						'<dt>Render Mode</dt>
 						<dd><select field="renderMode">
 							<option value="Decal">PBR</option>
-							<option value="BeforeTonemapping">Overlay</option>
+							<option value="BeforeTonemapping">Before Tonemapping</option>
+							<option value="AfterTonemapping">After Tonemapping</option>
 						</select></dd>
 
 						<dt>Blend Mode</dt>

+ 12 - 2
hrt/prefab/rfx/DistanceFog.hx

@@ -10,6 +10,7 @@ typedef DistanceFogProps = {
 	var endColor : Int;
 	var startColorDistance : Float;
 	var endColorDistance : Float;
+	var renderMode : String;
 }
 
 class DistanceFog extends RendererFX {
@@ -27,14 +28,15 @@ class DistanceFog extends RendererFX {
 	    	endColor : 0xffffff,
 			startColorDistance : 0,
 			endColorDistance : 100,
+			renderMode : "AfterTonemapping",
 		} : DistanceFogProps);
 
 		fogPass.pass.setBlendMode(Alpha);
 	}
 
 	override function apply(r:h3d.scene.Renderer, step:h3d.impl.RendererFX.Step) {
-		if( step == BeforeTonemapping ) {
-			var p : DistanceFogProps = props;
+		var p : DistanceFogProps = props;
+		if( (step == AfterTonemapping && p.renderMode == "AfterTonemapping") || (step == BeforeTonemapping && p.renderMode == "BeforeTonemapping") ) {
 			var ctx = r.ctx;
 			var depth : hxsl.ChannelTexture = ctx.getGlobal("depthMap");
 
@@ -72,6 +74,14 @@ class DistanceFog extends RendererFX {
 					<dt>Start Color</dt><dd><input type="color" field="startColor"/></dd>
 					<dt>End Color</dt><dd><input type="color" field="endColor"/></dd>
 				</div>
+				<div class="group" name="Rendering">
+					<dt>Render Mode</dt>
+						<dd><select field="renderMode">
+							<option value="BeforeTonemapping">Before Tonemapping</option>
+							<option value="AfterTonemapping">After Tonemapping</option>
+						</select></dd>
+				</div>
+
 			</dl>
 		'),props);
 	}