Parcourir la source

added sky custom color, irrPower no longer affect background/custom sky color

Nicolas Cannasse il y a 4 ans
Parent
commit
edcf2d5ec2
2 fichiers modifiés avec 17 ajouts et 5 suppressions
  1. 9 0
      h3d/scene/pbr/Renderer.hx
  2. 8 5
      h3d/shader/pbr/Lighting.hx

+ 9 - 0
h3d/scene/pbr/Renderer.hx

@@ -25,6 +25,7 @@ package h3d.scene.pbr;
 	var Specular = "Specular";
 	var Irrad = "Irrad";
 	var Background = "Background";
+	var CustomColor = "CustomColor";
 }
 
 @:enum abstract TonemapMap(String) {
@@ -36,6 +37,7 @@ typedef RenderProps = {
 	var mode : DisplayMode;
 	var exposure : Float;
 	var sky : SkyMode;
+	var ?skyColor : Int;
 	var tone : TonemapMap;
 	var emissive : Float;
 	var occlusion : Float;
@@ -400,6 +402,11 @@ class Renderer extends h3d.scene.Renderer {
 					pbrIndirect.skyColorValue.setColor(ctx.engine.backgroundColor);
 					pbrIndirect.gammaCorrect = true;
 					null;
+				case CustomColor:
+					pbrIndirect.skyColor = true;
+					pbrIndirect.skyColorValue.setColor(props.skyColor);
+					pbrIndirect.gammaCorrect = true;
+					null;
 				};
 			case LightProbe:
 				pbrIndirect.showSky = true;
@@ -640,8 +647,10 @@ class Renderer extends h3d.scene.Renderer {
 								<option value="Specular">Show Specular</option>
 								<option value="Irrad">Show Irrad</option>
 								<option value="Background">Background Color</option>
+								<option value="CustomColor">Custom Color</option>
 							</select>
 						</dd>
+						'+(skyMode==CustomColor?'<dt>Sky Color</dt><dd><input type="color" field="skyColor"/></dd>':'')+'
 				</div>
 
 				<div class="group" name="Params">

+ 8 - 5
h3d/shader/pbr/Lighting.hx

@@ -49,16 +49,19 @@ class Indirect extends PropsDefinition {
 			if( isSky ) {
 				if( showSky ) {
 					var color : Vec3;
-					if( skyColor )
+					if( skyColor ) {
 						color = skyColorValue;
-					else {
+						if( gammaCorrect )
+							color *= color;
+					} else {
 						var normal = (vec3( uvToScreen(calculatedUV), 1. ) * cameraInvViewProj.mat3x4()).normalize();
 						color = skyMap.get(rotateNormal(normal)).rgb;
 						color = min(color, skyHdrMax);
+						if( gammaCorrect )
+							color *= color;
+						color *= irrPower;
 					}
-					if( gammaCorrect )
-						color *= color;
-					pixelColor.rgb += color * irrPower;
+					pixelColor.rgb += color;
 				} else
 					discard;
 			} else {