jin02 / socengine Goto Github PK
View Code? Open in Web Editor NEWSimple Real-time Rendering Engine
License: MIT License
Simple Real-time Rendering Engine
License: MIT License
구현한 VCT를 조금씩 변경한다.
복셀화부터 끝까지..
다른 소스를 찾아보면서 좀 더 빠르고 정확하게 돌아갈 수 있도록 구현해야한다.
현재 그림자를 렌더링할때 Param과 Color 버퍼는 light 갯수와 비례하여 용량이 증가한다.
즉 빛이 많으면 많을수록 그림자 관련 버퍼의 용량도 덩달아 오르는 아주 비효율적인 구조를 가지고 있다.
또한, ShadowParam 버퍼는 Matrix와 index, bias를 동시에 가지고 있어 용량 낭비는 물론 캐싱 처리에도 매우 비효율적이다.
그냥 간단하게 요약하자면,
Light와 Shadow처리가 합쳐진 현재의 코드 덩어리를 분할하는 작업을 진행해야 한다.
덩달아 성능 향상도 있으니, 미루지 말고 한다.
뭔가 뒤엉켜서 되던것도 안되고 있다.
입대하기 전으로 돌리자 ㅠㅠㅠㅠ..
작성해야한다.
VCT 및 SSLR에서 쓸 예정이다.
심심하면 만들어둔다.
제일 쉬운 작업이다.
간단한 구나 실린더를 생성해주는 객체를 만든다.
현재 일부분은 master에 간단하게 구현되어 있으나 테스트를 해보진 않았다.
테스트를 해보면서 부족한 부분 및 버그를 해결한다.
Gamma Correction 구현한다.
를 구현한다.
간단한 작업이니까, 대충 뭐 구현해도 될 것 같다 -ㅠ-
Light Shaft를 구현한다.
Instant Radiosity를 구현한다.
뭐..
data driven rendering pipeline 이라고도 본 것 같은데, 내가 생각하는거랑 같은 의미다.
이걸 읽어보는게 도움이 될 것 같다.
http://www.slideshare.net/cagetu/ndc12-renderpipeline
그리고.. 이걸 해둬야 나중에 휴가나가서 빌드하는데 시간을 덜 뺏길 것 같다.
그렇다고 이걸 군대에서 구현하기에 쉽지는 않겠지만 말이다 -ㅠ-..
그래서 할 일을 정리해보자면,
2개로 나뉘지 않을까 싶다.
데이터 형식은 Json이면 충분하겠고.. 2번 같은 경우 Python으로 만들면 쉽게 만들 수 있지 않을까 싶다.
그래도 배보다 배꼽이 커지지 않게,
적당히 시간을 두고 생각해보면서 구현하면 될 것 같다.
휴가나가서 이것만 짜면 그건 그것대로 시간이 엄청나게 아까울거다.
참고 :
http://www.slideshare.net/cagetu/ndc12-renderpipeline
https://trello.com/c/JX8jKSmX/16--
http://cagetu.egloos.com/5871988
http://cagetu.egloos.com/5873268
잘 사나봄 ?
어디서 이슈를 올리는거지....
어디로 갔어 ?
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/PhysicallyBased_GBuffer_Common.h
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/PhysicallyBased_Forward_Common.h
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/PhysicallyBased_Common.h
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/MonteCarlo.h
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/MomentDepth.hlsl
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/IBLPass.hlsl
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/GaussianBlur.hlsl
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/GBufferParser.h
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/DynamicLighting.h
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/BilateralFiltering.hlsl
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/BRDF.h
https://github.com/Jin02/SOCEngine/blob/%2332/SOCEngine/SOCEngine/ShaderCodes/Voxelization_Common.h
From @Aven02 on February 12, 2014 17:11
Matrix, Quaternion, Vector 등
가장 기본적인 수학 개체들 구현
Copied from original issue: TeamSOC/SOCEngine#1
더이상의 코드 중복을 허용하기가 힘들어졌다.
그래서 미루고 미뤄왔던 include 처리를 구현한다.
1. Point Light Shadow
texelOffset을 전역으로 두지 말고 각 라이트마다 설정할 수 있도록 한다.
구현은, PointLightShaowParam에서 index랑 bias를 하나의 변수로 합치고, pointBlurSize 변수 하나를 추가하면 된다.
2. Directoinal Light, Spot Light 테스트
3. VSM 버그를 수정한다
그냥 전체적으로 모든 코드의 버그, 오타, 정리를 다 한다.
현재 지내는 환경이.. 환경이다보니.. 이런 작업 위주로 진행하는게 좋을듯 싶다.
굳이 디버깅이 필요없는 작업들이니깐 말이다.
아주 중요한 이슈임미다.
#2 와 연결된다.
DoF를 구현한다
다시 구현해야한다.
현재 구현한 것은, Skybox 테스트 및 Distant Light Probe를 테스트하기 위해 만든 간단한 구조이다.
이걸 더 체계적으로 설계하고 구현해야한다.
GBuffer::Emission을 사용하지 않는 방식으로 수정해야 한다.
작업해야할 목록들
#38 을 이전 휴가때 작업하면서 어느정도 코드도 정리되었으니,
이게 마지막 작업이라고 생각하면 될 것 같다.
Cascade 방식을 넣어보고는 싶었는데, 굳이.. 구현할 필요는 없다고 생각된다.
정 필요하면 나중에 #15 를 작업하면서 약간 덧 붙이면 더 좋은 결과물이 나올것이라 생각한다.
여튼.. 뭐 어느정도 할 수 있는건 이젠 거의 다 해본 것 같다.
Voxel Cone Tracing을 구현한다.
https://github.com/Jin02/SOCEngine/blob/master/SOCEngine/SOCEngine/ShaderCodes/GaussianBlur.hlsl#L9
이거 세팅 덜함 -ㅠ-..
그리고 USE_BLUR_PARAM 제거해버리는게 좋을듯
PCF를 구현한다
Motion Blur를 구현한다.
그림자부분을 다시 체크한다.
Cascade 형태는 아직 시간이 부족한 것 같으니 넘어가지만 VSM, PCF 정도는 빠르게 책을 읽든 자료를 뒤지든 해서 구현해보고 테스트 한다.
현재 그냥 FetchWorldMatrix를 가져와서 WorldMatrix를 구하도록 해두었다.
문제는, 이런식으로 해두면 중복계산이 생기기 때문에 성능에 좋지는 않다.
그리고 추후 나중에 WorldMatrix를 가져와서 처리하는 작업에서 중복된 계산 및 번거로운점이 많이 존재하는 편이다.
그래서 Transform 안에서 Unity같이 계층구조를 가지도록 하고,
Root Object들이 매 프레임마다 Transform에게 WorldMatrix를 계산하도록 시키는 방식으로 간단하게 구현할 듯 싶다.
그냥.. 그냥 단순하게 구현하면 될 것 같다 -_-..
그리고 FetchWorldMatrix 같은 Fetch~~ 함수들은 전부 제거할 생각이다.
다시 구현하기.
현재 구현된건 그냥 생각없이 긁어다둔거라서.. 이게 맞는지 틀린지도 잘 모른다.
Material Id에 관한 문제가 있던것으로 기억한다.
#19 와 연관된다.
Cube Mapping이라고도 불리는 그걸 구현한다.
일단 이걸 구현하는건 쉬우니 Sky 시스템도 구현한다.
그냥 master에 바로 작업했다.
현재 엔진에서는 헤더 파일들이 소스 파일들과 같은 폴더에 묶여있는데, 이건 HeaderOrganizer라는 스크립트를 통하여 해결했다.
https://github.com/Jin02/SOCEngine/blob/master/Script/HeaderOrganizer.py
Screen Space Ambient Occlusion를 구현한다.
Render에서 상당히 많이 분포되어 있는 코드들을 정리한다.
예를들면, BindTextureToPS나, VS라든지 이런것들을 그냥 하나로 정리한다.
뭐.. 이것 말고도 보이는 것들을 전부 한번 쭉 정리한다.
GBuffer와 Material의 구현이 많이 매끄럽지 않으며 비효율적이기에 구성 요소를 다시 구현해야한다.
GBuffer
현재 GBuffer는 albedo, specular, emission, depth 로 구성되어 있는데
이걸, albedo_occlusion, emission_specularity, motionXY_height_metallic, depth로 구성할 생각이다.
Material
HeightMap, MetallicMap, OcclusionMap, EmissionMap을 사용할 수 있도록 바인드 인덱스를 설정해주고, 쉐이더 코드에서 해당 4개 맵에 따른 처리를 해줘야 한다.
또한, Material ConstBuffer를 재 구성해야한다.
현재 기본으로 삼고 있는 PhysicallyBasedMaterial::GBufferParam이 비효율적으로 구성되어있다.
컬러는 uint 하나면 되는데 float4를 사용하고 있다던지 등등.. 뭐 그런 문제다.
여튼 이러한 문제도 모두 고쳐야 한다.
Direct Lighting의 결과물을 2개로 나눠야한다.
Diffuse Light Buffer와 Specular Light Buffer로 나눌 예정이다.
이에 대한 내용은,
http://www.slideshare.net/philiphammer/the-rendering-technology-of-lords-of-the-fallen
이걸 약간 참고하면 생각을 정리하기에 좋다고 생각한다.
VSM을 구현한다.
#2 는 VSM을 구현한 뒤 마저 진행한다.
Tone Mapping을 구현한다.
딱히.. 뭐 생각하면서 구현할건 아니니까.. 적당히 시중의 많은 엔진들이 쓰는 공식을 가져온다.
Bloom을 구현한다.
IOR, Flag, Acceleration 등등.. 아직 정리가 덜 되었다.
Light Probe
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.