feat: corrected texture resolutions

This commit is contained in:
TrèsAbhi committed 2024-01-24 14:52:06 -06:00
1 parent c08bf359f5
commit 3486dde8c1
3 files changed
+25 -22

No files matched your search

@@ -1,6 +1,6 @@
import { createPortal, useFrame } from '@react-three/fiber'; import { createPortal, useFrame } from '@react-three/fiber';
import { memo } from 'react'; import { memo } from 'react';
import { DepthTexture, Scene } from 'three'; import { DepthTexture, Scene, Vector2 } from 'three';
import { externalModuleMaskRenderTarget } from '../../../../../../../../components/ArmorMesh'; import { externalModuleMaskRenderTarget } from '../../../../../../../../components/ArmorMesh';
import { spacedArmorDepthRenderTarget } from '../../../../../../../../components/ArmorMesh/components/SpacedArmorDepth'; import { spacedArmorDepthRenderTarget } from '../../../../../../../../components/ArmorMesh/components/SpacedArmorDepth';
import { ArmorHighlighting } from './components/ArmorHighlighting'; import { ArmorHighlighting } from './components/ArmorHighlighting';
@@ -23,28 +23,28 @@ export const TankArmor = memo(() => {
<ArmorHighlighting />, <ArmorHighlighting />,
armorHighlightingScene, armorHighlightingScene,
); );
const renderSize = new Vector2();
const newRenderSize = new Vector2();
useFrame(({ gl, scene, camera }) => { useFrame(({ gl, scene, camera }) => {
const pixelRatio = gl.getPixelRatio();
gl.autoClear = true; gl.autoClear = true;
externalModuleMaskRenderTarget.setSize( gl.getSize(newRenderSize).multiplyScalar(pixelRatio);
gl.domElement.width, if (!newRenderSize.equals(renderSize)) {
gl.domElement.height, renderSize.copy(newRenderSize);
); spacedArmorDepthRenderTarget.depthTexture = new DepthTexture(
renderSize.x,
renderSize.y,
);
}
externalModuleMaskRenderTarget.setSize(renderSize.x, renderSize.y);
gl.setRenderTarget(externalModuleMaskRenderTarget); gl.setRenderTarget(externalModuleMaskRenderTarget);
gl.render(externalModuleMaskScene, camera); gl.render(externalModuleMaskScene, camera);
gl.clearDepth(); gl.clearDepth();
spacedArmorDepthRenderTarget.setSize( spacedArmorDepthRenderTarget.setSize(renderSize.x, renderSize.y * 0.5);
gl.domElement.width,
gl.domElement.height,
);
if (!spacedArmorDepthRenderTarget.depthTexture) {
spacedArmorDepthRenderTarget.depthTexture = new DepthTexture(
gl.domElement.width,
gl.domElement.height,
);
}
gl.setRenderTarget(spacedArmorDepthRenderTarget); gl.setRenderTarget(spacedArmorDepthRenderTarget);
gl.render(spacedArmorDepthScene, camera); gl.render(spacedArmorDepthScene, camera);
@@ -1,6 +1,6 @@
import { MeshProps, useFrame, useThree } from '@react-three/fiber'; import { MeshProps, useFrame, useThree } from '@react-three/fiber';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import { ShaderMaterial, Vector2 } from 'three'; import { IUniform, ShaderMaterial, Vector2 } from 'three';
import { degToRad } from 'three/src/math/MathUtils'; import { degToRad } from 'three/src/math/MathUtils';
import { canSplash } from '../../../../core/blitz/canSplash'; import { canSplash } from '../../../../core/blitz/canSplash';
import { isExplosive } from '../../../../core/blitz/isExplosive'; import { isExplosive } from '../../../../core/blitz/isExplosive';
@@ -26,7 +26,6 @@ export function ArmorMesh({
const initialShell = useDuel.getState().antagonist!.shell; const initialShell = useDuel.getState().antagonist!.shell;
const initialTankopedia = useTankopediaPersistent.getState(); const initialTankopedia = useTankopediaPersistent.getState();
const material = useRef<ShaderMaterial>(null); const material = useRef<ShaderMaterial>(null);
const resolution = new Vector2();
const explosionCapable = isExplosive(initialShell.type); const explosionCapable = isExplosive(initialShell.type);
useEffect(() => { useEffect(() => {
@@ -87,10 +86,12 @@ export function ArmorMesh({
useFrame(({ gl, camera }) => { useFrame(({ gl, camera }) => {
if (material.current) { if (material.current) {
material.current.uniforms.resolution.value = resolution.set( gl.getSize(material.current.uniforms.resolution.value);
gl.domElement.width,
gl.domElement.height, (
); material.current.uniforms.resolution as IUniform<Vector2>
).value.multiplyScalar(gl.getPixelRatio());
material.current.uniforms.externalModuleMask.value = material.current.uniforms.externalModuleMask.value =
externalModuleMaskRenderTarget.texture; externalModuleMaskRenderTarget.texture;
material.current.uniforms.spacedArmorDepth.value = material.current.uniforms.spacedArmorDepth.value =
@@ -116,7 +117,7 @@ export function ArmorMesh({
transparent transparent
depthWrite={false} depthWrite={false}
uniforms={{ uniforms={{
resolution: { value: null }, resolution: { value: new Vector2() },
externalModuleMask: { value: null }, externalModuleMask: { value: null },
spacedArmorDepth: { value: null }, spacedArmorDepth: { value: null },
spacedArmorMask: { value: null }, spacedArmorMask: { value: null },
@@ -112,4 +112,6 @@ void main() {
} else { } else {
gl_FragColor = vec4(color, (1.0 - penetrationChance) * 0.5); gl_FragColor = vec4(color, (1.0 - penetrationChance) * 0.5);
} }
// gl_FragColor = externalModuleMaskColor;
} }