101 lines
3.2 KiB
Python
101 lines
3.2 KiB
Python
"""
|
|
|
|
Test-script to view the baked GI
|
|
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
os.chdir(os.path.realpath(os.path.dirname(__file__)))
|
|
sys.path.insert(0, "../../")
|
|
|
|
from _bake_params import *
|
|
|
|
from panda3d.core import *
|
|
from direct.showbase.ShowBase import ShowBase
|
|
|
|
from rpcore.globals import Globals
|
|
from rpcore.render_target import RenderTarget
|
|
|
|
class Application(ShowBase):
|
|
|
|
def __init__(self):
|
|
|
|
load_prc_file_data("", """
|
|
textures-power-2 none
|
|
win-size 1600 900
|
|
""")
|
|
|
|
ShowBase.__init__(self)
|
|
Globals.load(self)
|
|
Globals.resolution = LVecBase2i(1600, 900)
|
|
sun_vector = Vec3(BAKE_SUN_VECTOR).normalized()
|
|
|
|
diameter = (BAKE_MESH_END - BAKE_MESH_START).length()
|
|
model_center = (BAKE_MESH_START + BAKE_MESH_END) * 0.5
|
|
sun_shadow_map_resolution = 8192
|
|
|
|
|
|
# model = loader.load_model("resources/test-scene.bam")
|
|
model = loader.load_model("scene/scene.bam")
|
|
model.reparent_to(render)
|
|
model.flatten_strong()
|
|
|
|
|
|
print("Rendering sun shadow map ..")
|
|
sun_shadow_cam = Camera("SunShadowCamera")
|
|
sun_shadow_lens = OrthographicLens()
|
|
sun_shadow_lens.set_film_size(diameter * 2, diameter * 2)
|
|
sun_shadow_lens.set_near_far(0, 2 * diameter)
|
|
sun_shadow_cam.set_lens(sun_shadow_lens)
|
|
sun_shadow_cam_np = render.attach_new_node(sun_shadow_cam)
|
|
sun_shadow_cam_np.set_pos(model_center + sun_vector * diameter)
|
|
sun_shadow_cam_np.look_at(model_center)
|
|
|
|
sun_shadow_target = RenderTarget()
|
|
sun_shadow_target.size = sun_shadow_map_resolution
|
|
sun_shadow_target.add_depth_attachment(bits=32)
|
|
sun_shadow_target.prepare_render(sun_shadow_cam_np)
|
|
|
|
self.graphicsEngine.render_frame()
|
|
sun_shadow_target.active = False
|
|
shadow_mvp = self.get_mvp(sun_shadow_cam_np)
|
|
|
|
# Load the dataset
|
|
dataset = loader.load_texture("raw-bake.png")
|
|
render.set_shader_input("GIDataTexture", dataset)
|
|
|
|
# Load the display shader
|
|
shader = Shader.load(Shader.SL_GLSL, "resources/display.vert.glsl", "resources/display.frag.glsl")
|
|
render.set_shader(shader)
|
|
|
|
render.set_shader_inputs(
|
|
ShadowMap=sun_shadow_target.depth_tex,
|
|
shadowMVP=shadow_mvp,
|
|
sunVector=sun_vector)
|
|
|
|
# Render spheres distributed over the mesh
|
|
mesh_size = BAKE_MESH_END - BAKE_MESH_START
|
|
|
|
for i in range(11):
|
|
for j in range(11):
|
|
for k in range(11):
|
|
offs_x = i / 10.0 * mesh_size.x + BAKE_MESH_START.x
|
|
offs_y = j / 10.0 * mesh_size.y + BAKE_MESH_START.y
|
|
offs_z = k / 10.0 * mesh_size.z + BAKE_MESH_START.z
|
|
|
|
sphere = loader.load_model("resources/sphere.bam")
|
|
sphere.reparent_to(render)
|
|
sphere.set_scale(0.02)
|
|
sphere.set_pos(offs_x, offs_y, offs_z)
|
|
|
|
|
|
def get_mvp(self, cam_node):
|
|
""" Computes the view-projection matrix of a camera """
|
|
return render.get_transform(cam_node).get_mat() * cam_node.node().get_lens().get_projection_mat()
|
|
|
|
|
|
Application().run()
|
|
|