diff --git a/src/Renderer.hx b/src/Renderer.hx index 0d0d0472..ca13b806 100644 --- a/src/Renderer.hx +++ b/src/Renderer.hx @@ -28,8 +28,6 @@ class Renderer extends h3d.scene.Renderer { var growBufferTemps:Array; var copyPass:h3d.pass.Copy; var backBuffer:h3d.mat.Texture; - var tempCubemapBuffer:h3d.mat.Texture; - var tempCubemapIndex:Int; public static var dirtyBuffers:Bool = true; @@ -53,11 +51,6 @@ class Renderer extends h3d.scene.Renderer { return sfxBuffer; } - public function setCubemapBuffer(tex:h3d.mat.Texture, idx:Int) { - tempCubemapBuffer = tex; - tempCubemapIndex = idx; - } - inline function get_def() return defaultPass; @@ -100,9 +93,7 @@ class Renderer extends h3d.scene.Renderer { backBuffer = ctx.textures.allocTarget("backBuffer", cast ctx.engine.width / pixelRatio, cast ctx.engine.height / pixelRatio, false); backBuffer.depthBuffer = depthBuffer; } - if (tempCubemapBuffer != null) { - ctx.engine.pushTarget(tempCubemapBuffer, tempCubemapIndex); - } else { + if (!cubemapPass) { // we push the target separately ctx.engine.pushTarget(backBuffer); } ctx.engine.clear(0, 1); @@ -193,11 +184,10 @@ class Renderer extends h3d.scene.Renderer { if (!cubemapPass && dirtyBuffers) dirtyBuffers = false; - ctx.engine.popTarget(); + if (!cubemapPass) + ctx.engine.popTarget(); - if (tempCubemapBuffer != null) { - tempCubemapBuffer = null; - } else { + if (!cubemapPass) { copyPass.pass.blend(One, Zero); copyPass.shader.texture = backBuffer; copyPass.render(); diff --git a/src/shaders/CubemapRenderer.hx b/src/shaders/CubemapRenderer.hx index 61996d4b..99329202 100644 --- a/src/shaders/CubemapRenderer.hx +++ b/src/shaders/CubemapRenderer.hx @@ -46,13 +46,14 @@ class CubemapRenderer { if (Settings.optionsSettings.reflectionDetail >= 4) Renderer.dirtyBuffers = true; - // e.pushTarget(cubemap, index); + e.pushTarget(cubemap, index); var ourRenderer = cast(scene.renderer, Renderer); - ourRenderer.setCubemapBuffer(cubemap, index); + // ourRenderer.setCubemapBuffer(cubemap, index); this.camera.setCubeMap(index, position); - // e.clear(0, 1); + this.camera.update(); + e.clear(0, 1); scene.render(e); - // e.popTarget(); + e.popTarget(); renderedFaces++; var time = haxe.Timer.stamp(); diff --git a/src/shaders/DefaultCubemapMaterial.hx b/src/shaders/DefaultCubemapMaterial.hx index a894c1eb..8cfb5669 100644 --- a/src/shaders/DefaultCubemapMaterial.hx +++ b/src/shaders/DefaultCubemapMaterial.hx @@ -32,7 +32,7 @@ class DefaultCubemapMaterial extends hxsl.Shader { var pixelTransformedPosition:Vec3; var transformedNormal:Vec3; @const var doGammaRamp:Bool; - // @var var outReflectVec:Vec3; + @var var outReflectVec:Vec3; @var var outLightVec:Vec4; @var var outPos:Vec3; @var var outEyePos:Vec3; @@ -62,10 +62,12 @@ class DefaultCubemapMaterial extends hxsl.Shader { var inLightVec = vec3(-0.5732, 0.27536, -0.77176) * mat3(global.modelViewTranspose); // inLightVec.x *= -1; outLightVec.xyz = -inLightVec * objToTangentSpace; - // var cubeVertPos = input.position * cubeTrans; - // var cubeNormal = input.normal * cubeTrans; - // var eyeToVert = (cubeVertPos - cubeEyePos).normalize(); - // outReflectVec = reflect(eyeToVert, cubeNormal); + + var cubeVertPos = input.position * cubeTrans; + var cubeNormal = (input.normal * cubeTrans).normalize(); + var eyeToVert = (cubeVertPos - cubeEyePos); + outReflectVec = reflect(eyeToVert, cubeNormal); + var p = input.position; // p.x *= -1; outPos = (p / 100.0) * objToTangentSpace; @@ -80,12 +82,12 @@ class DefaultCubemapMaterial extends hxsl.Shader { var outCol = diffuse; var bumpNormal = normalMap.get(calculatedUV * secondaryMapUvFactor).xyz * 2 - 1; - var incidentRay = normalize(pixelTransformedPosition - camera.position); - var reflectionRay = reflect(incidentRay, transformedNormal); + // var incidentRay = normalize(pixelTransformedPosition - camera.position); + // var reflectionRay = reflect(incidentRay, transformedNormal); var bumpDot = ((dot(bumpNormal, outLightVec.xyz) + 1) * 0.5); outCol *= (shading * bumpDot) + ambient; - outCol += diffuse.a * cubeMap.get(reflectionRay); + outCol += diffuse.a * cubeMap.get(outReflectVec); var eyeVec = (outEyePos - outPos).normalize(); var halfAng = (eyeVec + outLightVec.xyz).normalize(); diff --git a/src/shaders/DefaultCubemapNormalMaterial.hx b/src/shaders/DefaultCubemapNormalMaterial.hx index 743c14bf..e8d89a93 100644 --- a/src/shaders/DefaultCubemapNormalMaterial.hx +++ b/src/shaders/DefaultCubemapNormalMaterial.hx @@ -61,17 +61,25 @@ class DefaultCubemapNormalMaterial extends hxsl.Shader { var cubeTrans = mat3(global.modelView); var cubeEyePos = camera.position - global.modelView[3].xyz; + + var cubeVertPos = input.position * cubeTrans; + var cubeNormal = (input.normal * cubeTrans).normalize(); + var eyeToVert = (cubeVertPos - cubeEyePos); + outReflectVec = reflect(eyeToVert, cubeNormal); + + // var cubeTrans = mat3(global.modelView); + // var cubeEyePos = camera.position - global.modelView[3].xyz; // cubeEyePos.x *= -1; outPos = input.position; // outPos.x *= -1; - var cubeVertPos = input.position * cubeTrans; + // var cubeVertPos = input.position * cubeTrans; // cubeVertPos.x *= -1; - var cubeNormal = (input.normal * cubeTrans).normalize(); + // var cubeNormal = (input.normal * cubeTrans).normalize(); // cubeNormal.x *= -1; - var eyeToVert = cubeVertPos - cubeEyePos; - outReflectVec = reflect(eyeToVert, cubeNormal); + // var eyeToVert = cubeVertPos - cubeEyePos; + // outReflectVec = reflect(eyeToVert, cubeNormal); } function fragment() { // Diffuse part diff --git a/src/shaders/DefaultCubemapNormalNoSpecMaterial.hx b/src/shaders/DefaultCubemapNormalNoSpecMaterial.hx index 837cf0c4..1f270d35 100644 --- a/src/shaders/DefaultCubemapNormalNoSpecMaterial.hx +++ b/src/shaders/DefaultCubemapNormalNoSpecMaterial.hx @@ -55,9 +55,9 @@ class DefaultCubemapNormalNoSpecMaterial extends hxsl.Shader { var p = input.position; // p.x *= -1; - var cubeVertPos = p * cubeTrans; - var cubeNormal = (pN * cubeTrans).normalize(); - var eyeToVert = cubeVertPos - cubeEyePos; + var cubeVertPos = input.position * cubeTrans; + var cubeNormal = (input.normal * cubeTrans).normalize(); + var eyeToVert = (cubeVertPos - cubeEyePos); outReflectVec = reflect(eyeToVert, cubeNormal); } function fragment() {