2014-11-11 3 views
0

나는 노멀 맵 패스에 대한 빌보드의 법선 생성을 향상시키기 위해 지연 렌더링 파티클 시스템과 임을가집니다. 현재 나는 빌보드 법선을 정면을 향한 Z로 렌더링합니다. 빛을 렌더링하는 패스가 장면을 그릴 때, BB가 예상대로 빛을 마주 칠 때 빌보드와 상호 작용합니다. 여기빌보드 (볼륨 빌보드?)의 법선처럼 구체를 렌더링하십시오.

enter image description here

는 정상 패스 모습입니다 :

enter image description here

이 예상대로 ... 그러나 내가 더 잘 입자에 볼륨 효과의 종류를 시뮬레이션하고 싶습니다 작동합니다. 나는 더 많은 구체가있는 것처럼 각 간판을 다루고 싶다. 내 생각에 구형이 넓은 범위의 법선 방향을 가질 때 입자와의 조명 상호 작용이 더 좋을 것입니다. 나는.

enter image description here

이 좋은 생각이 (흰색 테두리 하나의 광고판 것)처럼 ID가 무언가를 모방 하시겠습니까? 나는 그 일을하는 법을 정말로 모른다.

편집

나는 렌더링 포인트를 사용하고, 나의 현재의 생각이 같은 것입니다 :

normal.x = gl_PointCoord.x; 
    normal.y = gl_PointCoord.y; 
    normal.z = 1.0; 

그러나 gl_PointCoord 나던 내가 그것을가하는 생각 효과를 생산 것으로 보인다. 아래의 스크린 샷 : enter image description here

편집 2

안녕 얘들 아, 여전히 문제가있을 것 같다.

vec3 normal = vec3(gl_PointCoord.x * 2.0 - 1.0, 1.0 - gl_PointCoord.y * 2.0 , length(gl_PointCoord.xy)); 
normal = normalize(normal); 

enter image description here

하지만 여전히 100 % 같지 않습니다 다음과 같이 내가 지금 사용하고있는 GLSL입니다. 대부분의 경우에 잘 작동하는 것 같습니다. 그러나 광고판을 향하는 방향 표시등을 사용할 때 문제가 발생할 수 있습니다.

enter image description here

그 그래도 것처럼 왼쪽 아래 파란색 법선 바로 수 없습니다. 정규 구면 법선을 보면 왼쪽 아래의 파란색이 검은 색으로 변합니다 (z 축의 부족을 나타냄). 나는 이것이 여전히 실종 된 것이라고 생각한다. 어떤 아이디어?

EDIT 3

잘못 무엇인지 알아 냈어. 정상적인 패스 중에 정상적으로 인코딩하는 것을 잊어 버렸고 나중에 일반화하는 것을 잊었습니다.

// Encoding pass 
vec3 normal = vec3(gl_PointCoord.x * 4.0 - 2.0, 2.0 - gl_PointCoord.y * 4.0, 1.0); 
normal = normalize(normal); 
normal = normal * 0.5 + 0.5; 

// Decoding pass 
vec3 normal = texture2D(normalMap, vUv).xyz; 
normal = normal.xyz * 2.0 - 1.0; 
+1

sphere-esque 모양을 제공하기 위해 텍스처 좌표를 기반으로 법선을 변조 할 수 없습니까? – Mokosha

+0

안녕 Mokosha, 예, 나는 그런 경우가 될 것이라고 생각하고있었습니다. 점 스프라이트와 gl_PointCoord를 사용하여 Im, 그러나 나는 그것을 구현하는 방법에 조금 붙어있다. 내 편집을 참조하십시오. – Mat

+1

'normal.xy = texcoord.xy * 2.0 - vec2 (1.0)'과 같이'normal = normalize (normal) '와 같이 보통 xy로 texcoord uv를 사용할 수 있습니다. –

답변

1

당신이 원하는처럼 gl_PointCoord 사용이 판명되지 않는 이유는 gl_PointCoord의 범위가되지 -1.0 1.0 0.0 1.0 것입니다.

약 0.0의 균형을 이루기 위해 0.5를 뺍니다.또한 2를 곱하면 범위가 -1.0에서 1.0 사이가됩니다.

normalize 결과 벡터를 만들 수도 있습니다 (이렇게하지 않으면 z 구성 요소가 1.0으로 고정되어 벡터 길이가 변경 될 때 원치 않는 밝기 변화가 발생할 수 있습니다).

+2

정상화 여부와 관계없이, 나는 2를 곱해야하고 1을 뺀 것이고, 0.5는 빼는 것이 아니라고 생각합니다. .5를 빼고 표준화하면 같은 결과가되지만, 언팩은 일반 함수로 만들 수 없습니다 (리터럴 함수가 아니더라도 눈 -> 두뇌가 최소 시간에 인식하는 함수 임). 곱셈이 없어도 MAD로 인해 연산 수가 줄어들지 않습니다. – Jessy

+0

안녕 얘들 아, 내 편집 2 좀 봐 주시겠습니까. 필자는 스크린 샷과 함께 사용하는 코드를 보여 줬다. 방정식과 관련 있다고 생각되는 이상한 인공물이있는 것 같습니다. 모든 입력은 정말 도움이 될 것입니다. – Mat

+0

나는 그것을 얻었다고 생각하지 않는다 (3 편). 답변으로 표시됩니다 :) – Mat

관련 문제