Giter Club home page Giter Club logo

socengine's People

Contributors

aven02 avatar chungh avatar daramkun avatar jin02 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

asdlei99

socengine's Issues

VCT 개량

구현한 VCT를 조금씩 변경한다.
복셀화부터 끝까지..

다른 소스를 찾아보면서 좀 더 빠르고 정확하게 돌아갈 수 있도록 구현해야한다.

Shadow Buffer 최적화

현재 그림자를 렌더링할때 Param과 Color 버퍼는 light 갯수와 비례하여 용량이 증가한다.
즉 빛이 많으면 많을수록 그림자 관련 버퍼의 용량도 덩달아 오르는 아주 비효율적인 구조를 가지고 있다.
또한, ShadowParam 버퍼는 Matrix와 index, bias를 동시에 가지고 있어 용량 낭비는 물론 캐싱 처리에도 매우 비효율적이다.

그냥 간단하게 요약하자면,
Light와 Shadow처리가 합쳐진 현재의 코드 덩어리를 분할하는 작업을 진행해야 한다.
덩달아 성능 향상도 있으니, 미루지 말고 한다.

롤백

뭔가 뒤엉켜서 되던것도 안되고 있다.

입대하기 전으로 돌리자 ㅠㅠㅠㅠ..

Vignetting

심심하면 만들어둔다.

제일 쉬운 작업이다.

BasicGeometryGenerator

간단한 구나 실린더를 생성해주는 객체를 만든다.
현재 일부분은 master에 간단하게 구현되어 있으나 테스트를 해보진 않았다.

테스트를 해보면서 부족한 부분 및 버그를 해결한다.

Lens Flare

를 구현한다.

간단한 작업이니까, 대충 뭐 구현해도 될 것 같다 -ㅠ-

Dynamic Rendering System

뭐..
data driven rendering pipeline 이라고도 본 것 같은데, 내가 생각하는거랑 같은 의미다.
이걸 읽어보는게 도움이 될 것 같다.
http://www.slideshare.net/cagetu/ndc12-renderpipeline

그리고.. 이걸 해둬야 나중에 휴가나가서 빌드하는데 시간을 덜 뺏길 것 같다.
그렇다고 이걸 군대에서 구현하기에 쉽지는 않겠지만 말이다 -ㅠ-..

그래서 할 일을 정리해보자면,

  1. 런타임에서 파이프라인 데이터를 읽고 렌더링 알아서 하는 방식
  2. 파이프라인 데이터를 컴파일할 수 있는 코드로 작성하는 코드 제네레이터 하나(ShaderFactory 같은..)
    • 아무리 그래도 컴파일로 돌아가는게 1번방식보단 빠르지 않을까

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

@_@

잘 사나봄 ?
어디서 이슈를 올리는거지....
어디로 갔어 ?

임시로 구현해둔 코드들 수정

Math

From @Aven02 on February 12, 2014 17:11

Matrix, Quaternion, Vector 등
가장 기본적인 수학 개체들 구현

Copied from original issue: TeamSOC/SOCEngine#1

VCT - 남은 이슈

  1. RWByteAddressBuffer를 이용해서 Interlock 처리 테스트 해보기
    • Cascade 문제와 연관됨.
  2. Texture Atlas가 아닌 api 기능을 활용해서 array 방식으로 변경
  3. IndirectColorMap을 DownSampling하고 Bilateral Filtering 혹은 Gaussian Blur 적용해보기
    • 그냥 제대로 sigma 적용되는거나 확인하면 됨

ShaderParser - include 처리

더이상의 코드 중복을 허용하기가 힘들어졌다.

그래서 미루고 미뤄왔던 include 처리를 구현한다.

코드 갈아 엎기

1. Point Light Shadow
texelOffset을 전역으로 두지 말고 각 라이트마다 설정할 수 있도록 한다.
구현은, PointLightShaowParam에서 index랑 bias를 하나의 변수로 합치고, pointBlurSize 변수 하나를 추가하면 된다.
2. Directoinal Light, Spot Light 테스트
3. VSM 버그를 수정한다

그냥 전체적으로 모든 코드의 버그, 오타, 정리를 다 한다.

코드 정리 및 미구현된 항목들 정리

  1. class 선언부분에서 변수 내리고 함수 올리는 작업들?
    • 당장 급한건 아니고, 굳이 보기 힘들거나 그런건 아니기에 나중에 해도 괜찮을 것 같다.
  2. Texture와 Map의 용어를 통일할것, shader 내 코드 정리들
    • 완료
  3. 그 외 코드 정리 등등..

현재 지내는 환경이.. 환경이다보니.. 이런 작업 위주로 진행하는게 좋을듯 싶다.
굳이 디버깅이 필요없는 작업들이니깐 말이다.

VCT 남은 이슈 - #16 보충

#2 와 연결된다.

  1. Bilateral Filtering
    Indirect Color Map의 해상도를 낮추고 Bilateral Filtering을 사용한다면 메모리 사용량을 낮추면서 약간의 퀄리티 상승을 노릴 수 있을 것 같다. 뭐, 이 처리를 하면서 가까운 물체에 대한 반사처리는 퀄리티가 떨어지겠지만, 현재 약간 부자연스럽게 느껴지는 Diffuse쪽은 좀 더 부드럽게 칠해지지 않을까 생각이 든다. 관련 내용은 http://cagetu.egloos.com/5576794 참고
  2. Voxelization - StoreVoxelColorAvg 문제
    제대로된 atomic 처리가 되지않고 값이 드문드문하게 들어간다. 하드웨어 문제이지 않을까 싶다. 그리고 이유는 모르겠지만 -_-, atomic 처리를 하지 않고 PS에서 voxelMap에 값을 직접 넣어주면 기록이 전혀 되질 않는다.
  3. Injection - StoreVoxelColorAvg 문제
    Compute Shader를 이용한 Injection Pass에서 StoreVoxelColorAvg가 전혀 작동하지 않는다. 특이한건 2번과 달리 여기서는 VoxelMap에 값을 직접 넣어야만 제대로 기록이 되고 atomic 연산을 사용하면 전혀 기록이 되지 않는다는 점이다. ㅅㅂ 3번을 해결할때 같이 해보고 뭔가 안된다 싶으면 CS를 버리고 VS->PS 파이프라인을 타면서 처리해버리는게 나을 듯 싶다. 물론 지금처럼 atomic 처리가 일부분만 되겠지만 어쩌든간에 작동하긴 하니깐 말이다(...)
  4. Specular VCT 공식 변경
    현재 Specular VCT부분에서 사용하고 있는 halfConeAngleRad는 내가 임의로 설정한 공식이다. 그냥 이리저리 삽질하다가 이뻐보이는 공식을 적용했다 -_-. 나중에 물리 기반에 맞는 공식이 있다면 그걸 적용해야 한다.
  5. Cascade 테스트
    적당히 돌아가지 않을까 싶기도 한데, 3번과 4번의 문제점 때문에 테스트 해보질 못했다.

Post Processing Pipeline 재구성

다시 구현해야한다.

현재 구현한 것은, Skybox 테스트 및 Distant Light Probe를 테스트하기 위해 만든 간단한 구조이다.

이걸 더 체계적으로 설계하고 구현해야한다.

Skybox 재구현

GBuffer::Emission을 사용하지 않는 방식으로 수정해야 한다.

VCT 정리

작업해야할 목록들

  1. 생각없이 복붙했다.
    https://github.com/Jin02/SOCEngine/blob/master/SOCEngine/SOCEngine/ShaderCodes/VoxelConeTracing.hlsl#L128
  2. Voxelization Bloating?
  3. 전체적인 코드 정리. 사용하게 편하게 정리한다든지 등등..

#38 을 이전 휴가때 작업하면서 어느정도 코드도 정리되었으니,

이게 마지막 작업이라고 생각하면 될 것 같다.

Cascade 방식을 넣어보고는 싶었는데, 굳이.. 구현할 필요는 없다고 생각된다.
정 필요하면 나중에 #15 를 작업하면서 약간 덧 붙이면 더 좋은 결과물이 나올것이라 생각한다.

여튼.. 뭐 어느정도 할 수 있는건 이젠 거의 다 해본 것 같다.

PCF

PCF를 구현한다

Transform에서 WorldMatrix 계산 문제 / Transform 정리

현재 그냥 FetchWorldMatrix를 가져와서 WorldMatrix를 구하도록 해두었다.

문제는, 이런식으로 해두면 중복계산이 생기기 때문에 성능에 좋지는 않다.
그리고 추후 나중에 WorldMatrix를 가져와서 처리하는 작업에서 중복된 계산 및 번거로운점이 많이 존재하는 편이다.

그래서 Transform 안에서 Unity같이 계층구조를 가지도록 하고,
Root Object들이 매 프레임마다 Transform에게 WorldMatrix를 계산하도록 시키는 방식으로 간단하게 구현할 듯 싶다.

그냥.. 그냥 단순하게 구현하면 될 것 같다 -_-..
그리고 FetchWorldMatrix 같은 Fetch~~ 함수들은 전부 제거할 생각이다.

Bilateral Filtering

다시 구현하기.

현재 구현된건 그냥 생각없이 긁어다둔거라서.. 이게 맞는지 틀린지도 잘 모른다.

GBuffer 재구성

Material Id에 관한 문제가 있던것으로 기억한다.
#19 와 연관된다.

중간 점검 및 정리

  1. MSAA 테스트
  2. 투명한 물체나 한번 띄워보기
    • 테스트 안해봄. 뭐.. 되겠지 -_- 귀찮다;
  3. UI 테스트
  4. 메모리 누수 체크
  5. 모든 클래스 변수와 함수 위치 변경
    • 변수는 아래로, 함수는 위로
  6. 다른 개발 환경에서 테스트
    • Intel graphics 4000

중복된 코드 제거, 코드 정리

Render에서 상당히 많이 분포되어 있는 코드들을 정리한다.

예를들면, BindTextureToPS나, VS라든지 이런것들을 그냥 하나로 정리한다.
뭐.. 이것 말고도 보이는 것들을 전부 한번 쭉 정리한다.

VCT를 대체할 수 있는 GI

어짜피 공부하는 프로젝트이니 한개 더 만들어보는 것도 나쁘지 않다고 생각된다.

Instant Radiosity, #34
SSLR, #17
SSAO, #35

이거 3개에 몇개 생각나는거 더 섞어보면 적당히 괜찮은 결과물이 나올 것 같다.

Engine Base

  1. Object
    • Unity의 GameObject와 비슷하게
  2. Transform
    • Unity의 Transform와 비슷하게
  3. Component
    • Unity와 비슷하게
  4. 기본적인 Scene 구조
  5. Model Importer - FBX, OBJ 등등..
    • FBX-Conv 이용
  6. Math
    • Vector, Matrix, Quaternion, Plane, Rect
  7. Basic Intersection
    • AABB, Cone, Frustum, Ray, Sphere
  8. VectorMap, VectorHashMap, MapInMap
    • 개발하다보면 드문드문하게 필요한 그런 것들 구현
  9. Time 관련
    • TeamSOC/SOCEngine-Prototype에서 지만이가 구현했던 Timer를 들고오면 될듯
  10. 기본적인 Rendering 시스템
    • Direct Lighting, Hard Shadow가 가장 기본적인 형태

GBuffer 및 Material 재구현

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를 사용하고 있다던지 등등.. 뭐 그런 문제다.

여튼 이러한 문제도 모두 고쳐야 한다.

VSM

VSM을 구현한다.
#2 는 VSM을 구현한 뒤 마저 진행한다.

Tone Mapping

Tone Mapping을 구현한다.

딱히.. 뭐 생각하면서 구현할건 아니니까.. 적당히 시중의 많은 엔진들이 쓰는 공식을 가져온다.

GI 갈아엎기 / VCT 다시 구현

코드도 일관성이 없고
버그가 나도 어디에서 나는지 확인하기도 힘들다.

더군다나 설계하지 않고 그냥 손가는대로 구현하다보니 구조도 뒤죽박죽이다.
중복되는 코드또한 상당히 많다.
#29 #2 #7 #16 등.. 전부 VCT 구현하겠다고 삽질한 이슈들이다.

지금 현재 있는걸 다시 지우고 새롭게 구현하는게 옳다고 생각된다.
#15 도 염두에 두고 설계해야한다.

Bloom

Bloom을 구현한다.

GBuffer 수정

IOR, Flag, Acceleration 등등.. 아직 정리가 덜 되었다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.