浏览代码

Can edit parallax max steps.

clementlandrin 1 年之前
父节点
当前提交
3c84d0c559
共有 2 个文件被更改,包括 18 次插入4 次删除
  1. 9 1
      h3d/mat/PbrMaterial.hx
  2. 9 3
      h3d/shader/Parallax.hx

+ 9 - 1
h3d/mat/PbrMaterial.hx

@@ -78,6 +78,7 @@ typedef PbrProps = {
 	@:optional var alphaKill : Bool;
 	@:optional var emissive : Float;
 	@:optional var parallax : Float;
+	@:optional var parallaxSteps : Int;
 	@:optional var textureWrap : Bool;
 
 	var enableStencil : Bool;
@@ -237,6 +238,8 @@ class PbrMaterial extends Material {
 		 	Reflect.deleteField(props, "depthWrite");
 		if ( !props.useChecker )
 			Reflect.deleteField(props, "useChecker");
+		if ( props.parallaxSteps == h3d.shader.Parallax.MAX_LAYERS || props.parallaxSteps == 0 )
+			Reflect.deleteField(props, "parallaxSteps");
 		#end
 	}
 
@@ -367,6 +370,10 @@ class PbrMaterial extends Material {
 				ps = new h3d.shader.Parallax();
 				mainPass.addShader(ps);
 			}
+			if ( props.parallaxSteps != null )
+				ps.maxLayers = props.parallaxSteps;
+			else
+				ps.maxLayers = h3d.shader.Parallax.MAX_LAYERS;
 			ps.amount = props.parallax;
 			ps.heightMap = specularTexture;
 			ps.heightMapChannel = A;
@@ -391,7 +398,7 @@ class PbrMaterial extends Material {
 		} else {
 			var s = mainPass.getShader(h3d.shader.Checker);
 			if ( s != null )
-				mainPass.removeShader(s); 
+				mainPass.removeShader(s);
 		}
 	}
 
@@ -556,6 +563,7 @@ class PbrMaterial extends Material {
 				</dd>
 				<dt>Emissive</dt><dd><input type="range" min="0" max="10" field="emissive"/></dd>
 				<dt>Parallax</dt><dd><input type="range" min="0" max="1" field="parallax"/></dd>
+				<dt>Parallax steps</dt><dd><input type="range" min="0" max="255" step="1" field="parallaxSteps"/></dd>
 				<dt>Shadows</dt><dd><input type="checkbox" field="shadows"/></dd>
 				<dt>Culling</dt>
 				<dd>

+ 9 - 3
h3d/shader/Parallax.hx

@@ -2,14 +2,16 @@ package h3d.shader;
 
 class Parallax extends hxsl.Shader {
 
+	public static final MIN_LAYERS = 6;
+	public static final MAX_LAYERS = 24;
 	static var SRC = {
 
 		@param var amount : Float;
 		@param var heightMap : Channel;
 		@:import BaseMesh;
 
-		@const var minLayers : Int = 6;
-		@const var maxLayers : Int = 24;
+		@const var minLayers : Int;
+		@const var maxLayers : Int;
 
 		var vertexTransformedNormal : Vec3;
 		var transformedTangent : Vec4;
@@ -50,5 +52,9 @@ class Parallax extends hxsl.Shader {
 		}
 	}
 
-
+	public function new() {
+		super();
+		maxLayers = MAX_LAYERS;
+		minLayers = MIN_LAYERS;
+	}
 }