Skip to content

Commit

Permalink
fix: fix video material
Browse files Browse the repository at this point in the history
fix video material
  • Loading branch information
ZenderJK committed Sep 5, 2023
1 parent 80a1936 commit 7f805d8
Show file tree
Hide file tree
Showing 14 changed files with 182 additions and 122 deletions.
2 changes: 1 addition & 1 deletion packages/media-extention/ChromaKeyMaterial.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Engine3D, ShaderLib, Vector4, Color, BlendMode, registerMaterial, Material, RenderShader } from "@orillusion/core";
import ChromaKeyShader from "./ChromaKeyShader.wgsl?raw";
import { ChromaKeyShader } from "./ChromaKeyShader";

/**
* ChromaKey Material
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export let ChromaKeyShader = /*wgsl*/`
#include "Common_vert"
#include "Common_frag"
#include "UnLit_frag"
Expand Down Expand Up @@ -106,3 +107,5 @@ fn maskedTex2D(uv: vec2<f32>, texSize: vec2<u32>, key_cb: f32, key_cr: f32) -> f
let pix_cr = rgb2cr(color.rgb);
return colorclose(pix_cb, pix_cr, key_cb, key_cr, materialUniform.colorCutoff, materialUniform.colorFeathering);
}
`
12 changes: 11 additions & 1 deletion packages/media-extention/VideoMaterial.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

import { Color, Engine3D, Material, RenderShader, ShaderLib, Texture, Vector4, registerMaterial } from '@orillusion/core';
import VideoShader from "./VideoShader.wgsl?raw";
import { VideoShader } from './VideoShader';

/**
* Video Material
Expand All @@ -15,6 +15,8 @@ export class VideoMaterial extends Material {
constructor() {
super();

ShaderLib.register("VideoShader", VideoShader);

this.defaultPass = new RenderShader(`VideoShader`, `VideoShader`);
this.defaultPass.setShaderEntry(`VertMain`, `FragMain`)

Expand Down Expand Up @@ -51,6 +53,14 @@ export class VideoMaterial extends Material {
return this.defaultPass.uniforms[`rectClip`].vector4;
}

public get baseMap(): Texture {
return this.defaultPass.getTexture(`baseMap`);
}

public set baseMap(value: Texture) {
this.defaultPass.setTexture(`baseMap`, value);
}

/**
* Set no envMap
*/
Expand Down
37 changes: 37 additions & 0 deletions packages/media-extention/VideoShader.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
export let VideoShader = /*wgsl*/`
#include "Common_vert"
#include "Common_frag"
#include "UnLit_frag"
#include "VideoUniform_frag"
@group(1) @binding(auto)
var baseMapSampler: sampler;
@group(1) @binding(auto)
var baseMap: texture_external;
fn vert(inputData:VertexAttributes) -> VertexOutput {
ORI_Vert(inputData) ;
return ORI_VertexOut ;
}
fn frag(){
var transformUV1 = materialUniform.transformUV1;
var transformUV2 = materialUniform.transformUV2;
var uv = transformUV1.zw * ORI_VertexVarying.fragUV0 + transformUV1.xy;
if(uv.x < materialUniform.rectClip.x || uv.x > (1.0-materialUniform.rectClip.z)){
discard;
}
if(uv.y < materialUniform.rectClip.y || uv.y > (1.0-materialUniform.rectClip.w)){
discard;
}
let size = textureDimensions(baseMap).xy - 1;
let iuv = vec2<i32>(uv * vec2<f32>(size));
let videoColor = textureLoad(baseMap, iuv) ;
ORI_ShadingInput.BaseColor = videoColor * materialUniform.baseColor ;
UnLit();
}
`
35 changes: 0 additions & 35 deletions packages/media-extention/VideoShader.wgsl

This file was deleted.

2 changes: 1 addition & 1 deletion packages/particle/material/ParticleMaterial.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export class ParticleMaterial extends Material {
// default value
this.baseMap = Engine3D.res.whiteTexture;
this.blendMode = BlendMode.ADD;
this.defaultPass.shaderState.renderOrder = 3001;
this.defaultPass.renderOrder = 3001;
this.defaultPass.shaderState.transparent = true;
this.defaultPass.shaderState.depthWriteEnabled = false;
this.defaultPass.shaderState.depthCompare = GPUCompareFunction.less;
Expand Down
60 changes: 0 additions & 60 deletions samples/lights/Sample_ClusterLight.ts

This file was deleted.

85 changes: 85 additions & 0 deletions samples/lights/Sample_ShadowAlpha.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import { GUIHelp } from "@orillusion/debug/GUIHelp";
import { Scene3D, HoverCameraController, Engine3D, AtmosphericComponent, Object3D, Camera3D, Vector3, View3D, DirectLight, KelvinUtil, LitMaterial, MeshRenderer, BoxGeometry, CameraUtil, SphereGeometry, Color, Object3DUtil, BlendMode, Vector4 } from "@orillusion/core";
import { GUIUtil } from "@samples/utils/GUIUtil";

//sample of direction light
class Sample_ShadowAlpha {
scene: Scene3D;
async run() {
Engine3D.setting.shadow.enable = true;
// Engine3D.setting.render.zPrePass = true;
Engine3D.setting.shadow.autoUpdate = true;
Engine3D.setting.shadow.shadowSize = 1024;
Engine3D.setting.render.debug = true;
Engine3D.setting.render.useLogDepth = false;
Engine3D.setting.occlusionQuery.octree = { width: 1000, height: 1000, depth: 1000, x: 0, y: 0, z: 0 }
await Engine3D.init({});

GUIHelp.init();

this.scene = new Scene3D();
let sky = this.scene.addComponent(AtmosphericComponent);

// init camera3D
let mainCamera = CameraUtil.createCamera3D(null, this.scene);
// mainCamera.enableCSM = true;
mainCamera.perspective(60, Engine3D.aspect, 1, 5000.0);
//set camera data
mainCamera.object3D.z = -15;
mainCamera.object3D.addComponent(HoverCameraController).setCamera(-15, -35, 200);

sky.relativeTransform = this.initLight();
await this.initScene();

let view = new View3D();
view.scene = this.scene;
view.camera = mainCamera;

Engine3D.startRenderView(view);
GUIUtil.renderDebug();
}

// create direction light
private initLight() {
// add a direction light
let lightObj3D = new Object3D();
lightObj3D.rotationX = 46;
lightObj3D.rotationY = 62;
lightObj3D.rotationZ = 0;
let sunLight = lightObj3D.addComponent(DirectLight);
sunLight.intensity = 15;
sunLight.lightColor = KelvinUtil.color_temperature_to_rgb(6553);
sunLight.castShadow = true;

GUIUtil.renderDirLight(sunLight);
this.scene.addChild(lightObj3D);
return sunLight.transform;
}

async initScene() {
let tex = await Engine3D.res.loadTexture("textures/grid.jpg");

{
let geometry = new BoxGeometry(20, 100, 20);
let material = new LitMaterial();
let obj = new Object3D();
let mr = obj.addComponent(MeshRenderer);
mr.geometry = geometry;
mr.material = material;
this.scene.addChild(obj);
}
{
let mat = new LitMaterial();
// mat.baseMap = Engine3D.res.grayTexture;
mat.uvTransform_1 = new Vector4(0, 0, 100, 100);
let floor = new Object3D();
let mr = floor.addComponent(MeshRenderer);
mr.geometry = new BoxGeometry(10000, 1, 10000);
mr.material = mat;
mat.baseMap = tex;
this.scene.addChild(floor);
}
}
}

new Sample_ShadowAlpha().run();
4 changes: 2 additions & 2 deletions src/assets/shader/ShaderLib.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import { BxdfDebug_frag } from './materials/program/BxdfDebug_frag';
import { Quad_depth2d_frag_wgsl, Quad_depthCube_frag_wgsl, Quad_frag_wgsl, Quad_vert_wgsl } from './quad/Quad_shader';
import { ColorUtil } from './utils/ColorUtil';
import { GenerayRandomDir } from './utils/GenerayRandomDir';
import { ClusterLight, GBuffer_pass, LambertShader, MatrixShader, QuadGlsl_fs, QuadGlsl_vs, SkyGBuffer_pass, UnLit, ZPassShader_fs, ZPassShader_vs, castPointShadowMap_vert, shadowCastMap_frag, shadowCastMap_vert } from '../..';
import { ClusterLight, GBuffer_pass, LambertShader, MatrixShader, QuadGlsl_fs, QuadGlsl_vs, SkyGBuffer_pass, UnLit, ZPassShader_fs, ZPassShader_vs, castPointShadowMap_vert, directionShadowCastMap_frag, shadowCastMap_frag, shadowCastMap_vert } from '../..';

/**
* @internal
Expand Down Expand Up @@ -112,7 +112,7 @@ export class ShaderLib {
ShaderLib.register("shadowCastMap_frag", shadowCastMap_frag);

ShaderLib.register("shadowCastMap_vert", shadowCastMap_vert);
ShaderLib.register("shadowCastMap_frag", shadowCastMap_frag);
ShaderLib.register("directionShadowCastMap_frag", directionShadowCastMap_frag);

ShaderLib.register("ZPass_shader_vs", ZPassShader_vs);
ShaderLib.register("ZPass_shader_fs", ZPassShader_fs);
Expand Down
19 changes: 11 additions & 8 deletions src/assets/shader/core/pass/CastShadow_pass.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ struct VertexAttributes{
#endif
}
@vertex
fn main(vertex:VertexAttributes) -> VertexOutput {
worldMatrix = models.matrix[vertex.index];
Expand All @@ -71,6 +73,7 @@ fn main(vertex:VertexAttributes) -> VertexOutput {
var worldPos = worldMatrix * vec4<f32>(vertexPosition, 1.0) ;
var vPos = shadowMatrix * worldPos;
return VertexOutput(vertex.uv, vPos );
}
`
Expand Down Expand Up @@ -217,14 +220,14 @@ export let directionShadowCastMap_frag: string = /*wgsl*/ `
// distance = distance / materialUniform.cameraFar ;
var fragOut:FragmentOutput;
#if USE_ALPHACUT
let Albedo = textureSample(baseMap,baseMapSampler,fragUV);
if(Albedo.w > 0.5){
fragOut = FragmentOutput(vec4<f32>(0.0),distance);
}
#else
fragOut = FragmentOutput(vec4<f32>(0.0),distance);
#endif
// #if USE_ALPHACUT
// let Albedo = textureSample(baseMap,baseMapSampler,fragUV);
// if(Albedo.w > 0.5){
// fragOut = FragmentOutput(vec4<f32>(0.0),distance);
// }
// #else
// fragOut = FragmentOutput(vec4<f32>(0.0),distance);
// #endif
return fragOut ;
}
Expand Down
9 changes: 5 additions & 4 deletions src/components/renderer/RenderNode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,10 +185,11 @@ export class RenderNode extends ComponentBase {
const pass = passArray[0];
if (pass.shaderState.transparent) {
transparent = true;
sort = sort > pass.shaderState.renderOrder ? sort : pass.shaderState.renderOrder;
sort = sort > pass.renderOrder ? sort : pass.renderOrder;
}
}
this.renderOrder = transparent ? this.renderOrder : sort;
// this.renderOrder = transparent ? this.renderOrder : sort;
this.renderOrder = sort;

if (!this._readyPipeline) {
this.initPipeline();
Expand Down Expand Up @@ -254,8 +255,8 @@ export class RenderNode extends ComponentBase {
const element = this.materials[i];
const passArray = element.getPass(RendererType.COLOR);
const pass = passArray[0];
if (pass.shaderState.transparent) {
sort = sort > pass.shaderState.renderOrder ? sort : pass.shaderState.renderOrder;
if (pass.renderOrder >= 3000) {
sort = sort > pass.renderOrder ? sort : pass.renderOrder;
} else {
sort = Math.max(sort - 3000, 0);
}
Expand Down
Loading

0 comments on commit 7f805d8

Please sign in to comment.