mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
cubemap optimizations holy shit
This commit is contained in:
parent
8883602b60
commit
1b7a3f485f
5 changed files with 34 additions and 33 deletions
|
|
@ -29,8 +29,6 @@ class Renderer extends h3d.scene.Renderer {
|
|||
var growBufferTemps:Array<h3d.mat.Texture>;
|
||||
var copyPass:h3d.pass.Copy;
|
||||
var backBuffer:h3d.mat.Texture;
|
||||
var tempCubemapBuffer:h3d.mat.Texture;
|
||||
var tempCubemapIndex:Int;
|
||||
|
||||
public static var dirtyBuffers:Bool = true;
|
||||
|
||||
|
|
@ -54,11 +52,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;
|
||||
|
||||
|
|
@ -103,9 +96,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);
|
||||
|
|
@ -207,11 +198,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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue